渲染器进程和主进程之间的通信主要有两种方式。
1. 一种方法是使用remote 模块来请求您要从主进程中获取的代码。该对象将包含您从主流程代码中导出的任何内容。
// main process, for example app/main.js
exports.test = () => console.log('Yay');
// renderer process, for example app/renderer.js
const { remote } = require('electron');
const mainProcess = remote.require('./main.js');
mainProcess.test(); // 'Yay'
2. 另一种方法是使用Inter Process Communication 在主进程和渲染器进程之间发送/接收事件:
// main process, for example app/main.js
myWindow.webContents.send('my-cool-log-event', 'Yay');
// renderer process, for example app/renderer.js
const { ipcRenderer } = require('electron');
ipcRenderer.on('my-cool-log-event', (evt, msg) => console.log(msg)); // 'Yay'
如果您想在渲染器进程中触发点击事件时从主进程调用函数,您可以使用任一方法。
1.
// main process, for example app/main.js
exports.onClick = () => console.log('Yay');
// renderer process, for example app/renderer.js
const { remote } = require('electron');
const mainProcess = remote.require('./main.js');
document
.querySelector('#elem')
.addEventListener('click', () => {
mainProcess.onClick();
});
2.
// main process, for example app/main.js
const { ipcMain } = require('electron')
ipcMain.on('click', () => console.log('do something'));
// renderer process, for example app/renderer.js
const { ipcRenderer } = require('electron');
document
.querySelector('#elem')
.addEventListener('click', () => {
ipcRenderer.send('click');
});