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

时间:2015-10-19 04:47:14

标签: node.js electron

在我的电子应用中,我从远程网址(“http://xxxx/index.html”)加载远程页面(index.html),然后我尝试将ipc事件发送到主进程然后处理它,失败了,但是如果我将index.html放在本地fs中就可以了。

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

------(主要过程)

  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>

2 个答案:

答案 0 :(得分:2)

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

如果您想通过http发送信号,可能需要使用add them yourselfsocket.io之类的内容。

答案 1 :(得分:2)

  

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

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

如果您使用<webview>标记,则默认情况下已将其停用,您可以通过nodeintegration属性启用它。请参阅docs。请注意,使用webview,您可以预先加载可以安全访问节点和电子API的脚本,然后在脚本执行完毕后销毁对这些对象的访问(请参阅here)。

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