ipcMain / ipcRenderer
-
使用场景
渲染进程通知主进程帮忙处理指定业务,主进程在通知渲染进程是否处理完成
-
同步通信
channel:通知事件名称,可随意命名
arg:发送通知时传递的参数
event.returnValue:同步返回数据
// 主进程 - 接收消息 - 返回数据
const { ipcMain } = require('electron')
ipcMain.on('channel', (event, arg) => {
console.log(arg) // prints "ping"
event.returnValue = 'pong'
})
// 渲染进程 - 发送通知
const { ipcRenderer } = require('electron')
console.log(ipcRenderer.sendSync('channel', 'ping')) // prints "pong"
-
异步通信
event.reply:将异步消息发送回发送者
// 主进程 - 接收消息 - 发送异步通知
const { ipcMain } = require('electron')
ipcMain.on('channel', (event, arg) => {
console.log(arg) // prints "ping"
event.reply('channel-reply', 'pong')
})
// 渲染进程 - 发送通知 - 主进程处理完后 - 接收通知
const { ipcRenderer } = require('electron')
ipcRenderer.on('channel-reply', (event, arg) => {
// 接收主进程发送的异步通知
console.log(arg) // prints "pong"
})
ipcRenderer.send('channel', 'ping')
remote
与 ipc 模块不同,remote 更加简便,可以直接调用 electron 中的内置模块, 而不必通过 ipc 发送通信
注意事项: 因为安全原因,remote 模块能在以下几种情况下被禁用:
-
BrowserWindow
- 通过设置enableRemoteModule
选项为false
。 -
<webview>
- 通过把enableremotemodule
属性设置成false
。
-
引用
// NodeJs 引用
const { remote } = require('electron').remote
// VUE 中直接引用
remote: window.require('electron').remote
-
使用
remote 可以直接调用 electron 中的内置模块,所以使用方式例子如下
// 以使用 ipcRenderer 为例
// 直接调用 ipcRenderer
remote.ipcRenderer.send('channel', 'ping')
remote 也可以获取当前窗口 remote.getCurrentWindow()
-
remote
模块有以下方法:
# 在Vue中可通过此方法调用 electron 中的自定义js模块
# 例如:this.electron.remote.require('./util/test.js')
# 返回在主进程中执行 `require(module)` 所返回的对象。
# `module` String
remote.require(module)
# 返回该网页所属的 `BrowserWindow` 对象。
remote.getCurrentWindow()
# 返回该网页的 `WebContents` 对象
remote.getCurrentWebContents()
# 返回在主进程中名为 `name` 的全局变量(即 `global[name]`) 。
# `name` String
remote.getGlobal(name)
# 返回主进程中的 `process` 对象。等同于 `remote.getGlobal('process')` 但是有缓存。
remote.process
网友评论