|
在Electron中,主进程(main process)可以通过webContents对象向渲染进程(renderer process)发送消息。以下是主进程向渲染进程发送消息的示例代码:
主进程(main.js):
- const { app, BrowserWindow } = require('electron');
-
- function createWindow() {
- // 创建浏览器窗口
- const win = new BrowserWindow({
- width: 800,
- height: 600,
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
- },
- });
-
- // 加载渲染进程的index.html文件
- win.loadFile('index.html');
-
- // 向渲染进程发送消息
- win.webContents.on('did-finish-load', () => {
- win.webContents.send('main-process-message', 'Hello from main process');
- });
- }
-
- app.whenReady().then(createWindow);
复制代码 渲染进程(index.js,假设你已经在index.html文件中包含了该脚本):
- const { ipcRenderer } = require('electron');
-
- // 监听主进程发送的消息
- ipcRenderer.on('main-process-message', (event, message) => {
- console.log(message); // 输出: Hello from main process
- });
复制代码 渲染进程还需要确保在渲染HTML时,Electron的preload脚本被正确设置,以允许ipcRenderer模块在渲染进程中使用。如果你使用了nodeIntegration: true,则不需要preload脚本。如果没有,你需要创建一个preload.js文件并在BrowserWindow的webPreferences中指定它:- const { contextBridge, ipcRenderer } = require('electron');
-
- contextBridge.exposeInMainWorld('electron', {
- sendMessage: (channel, args) => ipcRenderer.send(channel, args),
- receiveMessage: (channel, callback) => ipcRenderer.on(channel, (event, ...args) => callback(...args)),
- });
复制代码 然后在创建BrowserWindow时,使用webPreferences的preload属性来加载这个脚本:
- win.webContents.openDevTools();
复制代码
|
|