主要原理
主要是通过electron中的preloa在本地中预先加载一个指定脚本js文件,这个文件可以使用node APIs调用electron中的相关接口如ipcRenderer等,所以在electron中使用远程网页的窗口中定义加载js文件,并开放webviewTag,就可以在预加载文件中通过定义window中的方法调用electron接口,然后在远程网页中直接调用预加载文件中定义的方法就可以实现与electron的相关通信。主要实现过程如下:
- 在BrowserWindow中定义如下:(注意preload的文件路径需要绝对路径)
1
2
3
4
5
6win = new BrowserWindow({
webPreferences: {
webviewTag: true,
perload: path.join(__dirname, './preload.js')
}
}) - 在preload.js中定义相关事件,这里定义一个与electron主进程进行通信的方法
1
2
3
4
5
6
7
8
9
10// preload.js
const { ipcRenderer } = require("electron")
window.senSomeToMain = function () {
ipcRenderer.send('senSomeTomain')
}
// 监听electron主进程返回
ipcRenderer.on('returnSometh', (event, data) => {
//该方法在远程网页中定义
window.getReturn(data)
}) - 在远程页面中的使用如下:
1
2
3
4
5
6
7
8// index.html
// 与electron主进程通信
window.sendSomeToMain()
// 定义返回信息的回调
window.getReturn = function (data) {
console.log(data)
}主要用途
方便网页资源部署在服务器,使远程网页可以通过本地的electron访问相关的硬件资源,如打印机等。也方便使网页开发功能业务和electron资源调用业务分开,使部署和开发相对简单。