如何从我的网页调用Electron中的函数/模块?

我会尽量用简短的段落来描述一个最小化的问题。

简而言之,我想在我的电子应用程序中使用一些逻辑或者在我的电子应用程序中调用一些函数(实际上我正在为我的网页包装一个电子应用程序的'shell')。

假设我想在我的电子应用中“暴露”一个function。 说,

function printNumbers () { console.log(1) } 

注意它应该位于我的电子代码中。

然后运行我的应用程序后,我想从我的网页调用此function(单击从网站加载的网页中的一个button,然后在我的电子应用程序中打开一个新的窗口)。 现在,我想我可以通过使用开发者控制台来检查printNumber是否工作。

我已经检查了如何使用remote模块来调用电子内部的函数/模块。 但我没有find一种方法来调用我在我的电子代码库中编写的函数。

顺便说一句:我可以启用nodeIntegration选项。

渲染器进程和主进程之间有两种主要的通信方式。

1.一种方法是使用远程模块来要求从主进程中取得的代码。 该对象将包含从主进程代码导出的所有内容。

 // 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.另一种方法是使用进程间通信在主进程和渲染进程之间发送/接收事件:

 // 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'); });