如何从电子远程页面访问节点的API?

在我的电子应用程序中,我从远程URL(“ http://xxxx/index.html ”)加载远程页面(index.html),然后我试图发送一个ipc事件到主进程然后处理它,并失败了,但如果我把index.html放在本地fs,那就OK了。

所以我的问题是如何使页面从远程页面访问节点api(如require,ipc等)。

——(主stream程)

mainWindow = new BrowserWindow({width: 800, height: 600}); // and load the index.html of the app. mainWindow.loadUrl('http://localhost:8080'); //mainWindow.loadUrl('file://' + __dirname + '/index.html'); var ipc = require('ipc'); ipc.on('spawn-ext-process', function () { console.log("spawn-ext-process"); }); 

——— http:// localhost:8080 / index.html (渲染过程)

 <script> var ipc = require('ipc'); ipc.send('spawn-ext-process'); </script> 

AFIAK ipc api不使用http。 它本质上是从本地机器上运行的程序的一部分发送信号到该机器上相同程序的另一部分。

如果你想通过http发送一个信号,你可能想使用像socket.io或websockets的东西。

如何使页面从远程页面访问节点api(如require,ipc等)?

取决于你如何加载页面。 如果您在BrowserWindow实例上使用BrowserWindow ,则默认启用节点集成(您可以通过nodeIntegration选项禁用它,请参阅文档 )。

如果您使用的是<webview>标记,那么默认情况下它是禁用的,您可以通过nodeintegration属性启用它。 看文档 。 请注意,通过webview您可以预加载安全地访问节点和电子API的脚本,然后在脚本执行完成后(见这里 ),对这些对象的访问将被销毁。

就像@FelipeBrahm所说,我不会给远程页面访问node.js或电子API,除非它是你自己的页面,即使你这样做,也要谨慎。