electronic-js如何调用在index中呈现的函数



我很想调用我在索引中呈现的函数,然后用globalShortcut执行该函数,我在研究并发现IPC可以执行,但所有的例子都是使用main中的函数,而不是索引中的函数。任何能指导我的想法

根据Electron文档的建议,我假设nodeIntegration设置为true,contextIsolation设置为false。要从主线程触发渲染器进程中的函数,可以使用ipcMainipcRenderer(这些模块是Electron的一部分)。

首先,您需要使用contextBridge为渲染器公开一个API。这可以通过preload.js文件来完成,该文件可以访问像主线程这样的所有模块。

示例:

main.js

const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
function createMainWindow(){
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
enableRemoteModule: false,
preload: path.join(__dirname, 'preload.js'),
},
});
}
app.on('ready', () => {
createMainWindow();
});

预加载.js

const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('api', {
send: (channel, data) => {
// Whitelist channels
let validChannels = ['toMain'];
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data);
}
},
receive: (channel, func) => {
let validChannels = ['fromMain'];
if (validChannels.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.on(channel, (event, ...args) => func(...args));
}
},
});

然后,在渲染器进程中,可以使用window.api.send(channel, parameters);向主线程发送消息,使用window.api.receive(channel, parameters);侦听传入消息。类似地,您可以在主进程中使用ipcMain.on(channel, (event, parameters) => { });来处理来自渲染器的消息。但是,要直接向它发送消息,您必须使用webContents,就像这样:mainWindow.webContents.send(channel, parameters);

在您的情况下,要在渲染器中执行函数,您需要在主进程中调用mainWindow.webContents.send('fromMain', 'trigger-function');;并在您的渲染器中侦听此事件,如下所示:

window.api.receive('fromMain', (parameters) => {
if (parameters === 'trigger-function'){
// Call your renderer function here
}
});

最新更新