【问题标题】:how to access the node api from a remote page in electron?如何从电子中的远程页面访问节点api?
【发布时间】:2016-01-17 08:24:07
【问题描述】:

在我的电子应用程序中,我从远程 url 加载远程页面(index.html),例如(“http://xxxx/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>

【问题讨论】:

  • 即使使用 Electron,您也无法访问远程页面中的节点。那将是非常危险的。

标签: node.js electron


【解决方案1】:

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

如果您想通过 http 发送信号,您可能需要使用 socket.iowebsockets 之类的东西。

【讨论】:

    【解决方案2】:

    如何让页面从远程页面访问node api(如require、ipc等)?

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

    如果您使用的是&lt;webview&gt; 标签,则默认情况下它处于禁用状态,您可以通过nodeintegration 属性启用它。请参阅docs。请注意,使用webview,您可以安全地预加载确实可以访问节点和电子 API 的脚本,然后在脚本完成执行时销毁对这些对象的访问(请参阅here)。

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

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2019-07-13
      • 2013-05-29
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多