首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第四章-使用本机文件对话框和帮助进程间沟通 | Electron实战

图4.1 我们的应用程序将在启动时触发“打开文件”对话框。到本章结束时,此功能将被从UI触发对话框的功能所取代。 您可以使用Electron dialog模块创建本机对话框。...在本例中,我们只激活openFile标志,它表示此对话框用于选择要打开的文件,而不是选择多个目录或多个文件。其他可用的标志是openDirectory和multiselection。...在图4.3中,我们可以在终端中显示的"Open File"对话框中看到选择的结果。注意dialog.showOpenDialog()返回一个数组。...通过在配置对象之前传递对BrowserWindow实例的引用(我们已经将其存储在mainWindow中)作为dialog.showOpenDialog()的第一个参数,我们可以轻松地在Electron中创建这个...打开对话框可以配置为允许一个文件或目录以及多个文件或目录。 打开对话框可以配置为只允许用户选择特定的文件类型。 打开对话框返回一个数组,该数组由用户选择的一个或多个文件或目录组成。

1.9K20

Electron 进程通信(IPC)装饰器应用

在 Electron 在实现渲染进程到主进程通信时,无论是单向通信还是双向通信都必须经过:编写处理函数(主进程)、注册事件监听(主进程)、暴露 API(预加载脚本)和执行 API(渲染进程)4 个步骤。...{ const { canceled, filePaths } = await dialog.showOpenDialog({}) if (!...: 将原 business.ts 文件中的业务处理函数,修改为约定业务服务规范,在 @ServiceHandler 装饰器定义时增加一个区分单向或双向通信的标识。...OpenFileService { @ServiceHandler() async handleFileOpen() { const { canceled, filePaths } = await dialog.showOpenDialog...: ', result) } 总结 通过对 Electron 进程通信代码利用 TypeScript 装饰器进行封装,实现注册事件监听和暴露 API 的操作自动化,在遇到新的进程通信功能时仅需要按约定实现业务部分的核心服务后即可在渲染进程中直接执行

23410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第五章-处理多窗口 | Electron实战

    当该窗口关闭时,应用程序退出。虽然这种行为完全可以接受,但我们通常希望能够打开多个独立的窗口。在本章中,我们将Fire Sale从一个单窗口应用程序转换为一个支持多个窗口的应用程序。...这是因为我们仍然在一些地方引用mainWindow。它在dialog.showOpenDialog()中引用,以在macOS中将对话框显示为工作表。...const files = dialog.showOpenDialog(targetWindow, { //showopendialog()获取对浏览器窗口对象的引用。...在本节中,我们只允许应用程序在macOS中保持打开状态。默认情况下,当Electron触发它的window-all-closed事件时,它将退出应用程序。...图5.12 在应用程序打开时创建一个窗口,但没有窗口: .

    4.2K21

    客户端开发(Electron)系统级API使用

    嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发...调用系统API实现文件保存或读取前的选择功能: 如上图所示的功能,我们在使用电脑时就经常会遇到,在Electron中我们可以通过调用dialog.showOpenDialogSync函数同步打开下面的对话框...示例:     我们在App.vue中新增了一个openFIle函数,设置了默认的左上角标题,默认打开的文件路径,确认按钮文案和文件类型的过滤: openFile...Electron给我们提供关于对话框的API如下: API名称 主要参数 showOpenDialogSync [browserWindow, ]options showOpenDialog...菜单栏菜单: Electron提供的默认菜单栏中的菜单都是一些为了演示和开发使用的,在实际的应用中我们还是需要进行配置来实现我们自己的功能。

    2.8K50

    Electron利用web技术开发桌面应用

    打开cmd.exe,一路cd到H:\Electron。(也可以在Electron文件夹下,按住Shift键并右键单击空白处,选择在此处打开命令窗口来启动cmd.exe。)...将notepad文件夹整个拖到VS Code中打开(或者点菜单文件-打开文件夹选择notepad文件夹打开项目),可以看一下项目的目录结构:node_modules文件夹下是各种模块、类库,src下是app...主菜单:因为菜单只存在于主进程中,所以在执行某些涉及页面(渲染进程)的菜单命令时,比如Open(打开文件)命令,就需要与渲染进程进行通信,这可以使用ipcMain和ipcRenderer来实现。...比如,这里,当主进程发来new的消息后,渲染进程就开始着手新建一个文档,在新建前会使用askSaveIfNeed方法检测文档是否需要保存,并提示用户保存;对于open的消息就会调用remote.dialog.showOpenDialog...退出时保存检测的实现过程 正如前面在App功能细节中讨论的一样,在关闭程序前,友好的做法是检测文档是否需要保存,如果尚未保存,通知用户保存。

    2.3K30

    Electron入门教程3 ——进程通信

    欢迎来到Electron入门教程的第三期教程,这一节非常重要!进程间通信(IPC)是在Electron中构建功能丰富的桌面应用程序的关键部分。...✧ 渲染进程向主进程的单向通信 在Electron中,进程通过开发人员定义的“通道”与ipcMain模块和ipcRenderer模块进行通信。...在下面的例子中,我们将从渲染进程中打开一个选择本地文件对话框,并返回所选文件的路径。 下面是案例涉及的所有代码: index.html dialog.showOpenDialog() if (canceled) { return "" } else { return filePaths...,并监听ICP接口的调用 在主进程中,我们将创建一个调用dialog模块的showOpenDialog方法的函数handleFileOpen(),用于返回用户选择的文件路径的值。

    1.2K40

    electron 的Dialog模块

    dialog 模块是主进程模块,它允许我们在 Electron 应用程序中创建各种类型的对话框,包括警告框、信息框、文件选择框等。这些对话框可用于与用户交互,获取输入、展示消息、选择文件等操作。...一般会在渲染进程中想主进程发送信息,然后弹出消息框,这里为了代码演示方便,直接写到主进程了 const { app, BrowserWindow, dialog } = require('electron...使用它时,代码的执行会继续进行,不会停止在对话框显示期间。 dialog.showMessageBoxSync: 这是一个同步方法,会阻塞主线程直到用户关闭对话框。...使用它时,代码的执行会在对话框关闭之前停止。...; 文件选择框 显示选择文件的对话框 dialog.showOpenDialog({ properties: ['openFile'] }).then(result => { console.log

    69310

    基于ElectronEgg&Python,从零开始打造一款免费的PDF桌面工具

    通信 在 ElectronEgg 中为了安全问题,不可以直接在渲染进程中调用 Nodejs中的相关操作。...1、在主线程中通过 ipcMain.on 监听事件 index.ts 主进程中加载脚本,设置事件监听 import { app, dialog, ipcMain, shell } from 'electron...在您的预加载脚本中添加以下代码,向渲染器进程暴露一个全局的 window.electronAPI 变量。...const { canceled, filePaths } = await dialog.showOpenDialog() if (!...() // 获取打开的文件夹路径 } 例:主进程的错误信息发送给渲染进程,通过界面显示出来 主进程到渲染器进程 将消息从主进程发送到渲染器进程时,消息需要通过其 WebContents 实例发送到渲染器进程

    76911

    用JS开发跨平台桌面应用,从原理到实践

    印象很深的,去年迅雷在发布迅雷X10.1时的文案: 从迅雷X 10.1版本开始,我们采用Electron软件框架完全重写了迅雷主界面。...你可以同时在Electron的主进程和渲染进程使用Node.js API,)所有在Node.js可以使用的API,在Electron中同样可以使用。...我们在渲染进程中创建的 dialog 对象其实并不在我们的渲染进程中,它只是让主进程创建了一个 dialog 对象,并返回了这个相对应的远程对象给了渲染进程。...六、对话框 dialog 模块提供了api来展示原生的系统对话框,例如打开文件框,alert框,所以web应用可以给用户带来跟系统应用相同的体验。...` }) }) 6.3 文件框 dialog.showOpenDialog用于打开或选择系统目录。

    7.1K50

    Electron+Vue开发爬虫客户端2-自动下载网页文件

    /vue-cli-plugin-electron-builder/ Choose Electron Version选择默认即可 运行报错 INFO Launching Electron… Failed...来选择文件路径了 一定要先设置preload再打开页面,当然同时设置也是可以的 调用其中的方法获取返回数据 myfun: function() { var that = this; const...will-download中不能下载行为或者是取消弹窗,但是在主进程里是可以的。...也就是说渲染进程中可以获取下载进度但是没法设置下载位置, 所以在下载地址需要重定向获取的前提下可行的方案有 在主线程中设置文件保存的位置,渲染进程中获取文件的下载进度。...path.join( app.getPath("downloads"), item.getFilename() ); item.setSavePath(filePath); }); 在渲染进程中获取

    3.3K20

    vscode源码分析【七】主进程启动消息通信服务

    在mian.ts中的doStartup方法里,创建了一个命名管道服务 (src\vs\code\electron-main\main.ts) server = await serve(environmentService.mainIPCHandle...,e代表失败时的回调(有点类似es6的Promise) 匿名函数内createServer就是nodejs里的原生接口, Server类绑定了连接和断开的事件,暂时不细说; 回头看看main.ts...\app.ts)的startup方法,还启动了Electron的IPCServer const electronIpcServer = new ElectronIPCServer(); vscode把electron...日志、菜单栏、工作台、升级.....等等 主要的通信还是用electronIpcServer 来干的,mainIpcServer只有一个launch信道; 下面我们看看消息是怎么传递的 我们随便打开一个信道的类型...': return this.service.showOpenDialog(arg[0], arg[1]); //......

    1.4K51

    Electron搭配React的history路由模式打包exe客户端

    D //安装electron cnpm i electron-builder -D // 用来打包客户端安装包 -- 需要下一步下一步安装来完成点击打开 cnpm i electron-packager...-D // 用来打包客户端可执行文件 -- 直接点击打包后的可执行文件即可运行 // 安装生产相关依赖 cnpm i electron-log // 用于调试时的log输出,dev环境会直接在终端打印日志同时会在项目跟目录的...electron程序中,大量的逻辑是写在renderer.js文件中的。...本文的测试环境:electron@13.0.1,win10。本文探讨preload.js在browserWindow中的应用,当然,preload.js在webview中也有使用到。...在本地和打包后的路径会有很大出入。使用app.isPackaged判断是否是打包后。如下来获取该目录正确地址来执行后端打包后的可执行文件。

    1.7K30

    携程机票Sketch插件开发实践

    三、Sketch Plugin 开发技术 在插件开发实现过程中,我们遇到许多交叉技术领域的问题,也因此进行了多次技术重构。...当我们不知道应该订阅哪个 Action 时,可以使用通配符。但运行时性能开销很大,建议仅在开发阶段使用。 示例:Terminal 打开通配符支持。...中运行插件命令 典型的插件开发工程的目录结构示例 ├── .gitignore├── README.md├── src // sources│ ├─...: import dialog from '@skpm/dialog'console.log( dialog.showOpenDialog({ properties: ['openFile',...例如,当我们需要扩展 “创建组件“ 对话框,该对话框在 “创建组件” 事件发生时才会出现,因此在 Actions API 中搜索与 symbol 有关的事件,找到名为 Create Symbol 的 Action

    1.4K10

    超详细的Electron使用教程

    启动 执行npm start即可启动这个项目,可以看到打开了一个窗口,显示index.html的内容。 本地应用网络请求失败 上面可以看到在main.js中是通过loadFile来加载文件的。...开发者工具 在浏览器中,我们可以通过右键->检查来打开开发者工具,可以看到控制台输出、文件、代码、报错等信息。...但是注意:因为之前是在createWindow中创建const win,所以如果使用快捷键后再关闭重新打开应用,再使用快捷键时,这时候win.webContents的win还是之前的对象,已经销毁了,就会报错...mac安装包 安装forge后打包时默认的是压缩包,make目录下是一个名为zip的文件夹,文件夹里最终是一个zip文件,解压后是app格式的mac执行文件,可以直接打开。 那么如果打一个安装包?...打包完成在/out/make/目录下看到除了之前的zip目录,多生成了一个dmg文件,这样安装包就打好了。

    8.5K50

    uniCloud+uni-admin+electron实现 electron应用更新

    下载资源并存到本地 立即重启:替换 本地asar资源包 重启应用 稍后重启:关闭应用时 替换资源包 再次打开为新的 安装包模式 为下载安装包并弹出资源管理器标记安装包 资源替换效果如下 原本react-ts...为安装包所在目录 搭建uni-admin环境和开发云函数 搭建uni-admin环境 hbuilder x 新建uni-admin模板项目 新建一个官方模板数据表 可以去uniCloud web控制台创建...需要去控制台创建 如果创建了 需要下载的本地 选择 uni-admin模式的项目模式 一路确定即可 然后 在pages.json可以找到 页面路径 一般为 复制 pages/opendb-app-versions...(mainWindow, { title: '资源保存中', message: '资源保存中', }); fs.writeFile...(mainWindow, { title: '资源保存中', message: '资源保存中', }); fs.writeFile

    1.6K50
    领券