电子-window.postMessage在预加载和具有特定目标原点的渲染器之间进行对话

时间:2018-09-26 16:28:46

标签: electron

我想使用启用了contextIsolation的targetOriginpostMessage之间的preload.js的{​​{1}}来验证/区分消息的来源。

因此,如果消息来自renderer.js,则originTarget类似于preload.js,而来自渲染器file://preload.js

设置file://renderer.jsfile://preload.js时,出现错误file://renderer.js

有人知道如何实现我要达到的目标吗? 谢谢

1 个答案:

答案 0 :(得分:0)

引用MDN web docs

  

最后,将消息发布到文件的页面上:URL当前要求targetOrigin参数为“ *”。 file://不能用作安全限制;将来可能会修改此限制。

因此在preload.js中,您将不得不诉诸于类似的

window.addEventListener("DOMContentLoaded", () => {
  window.postMessage({ type: "fooType", text: "barMsg" }, "*")
})

在接收渲染器(网页)中,您可以限制消息处理,例如像这样:

window.addEventListener(
  "message",
  event => {
    if (event.origin === "file://" && event.source === window) {
      console.log(event.data)
    }
  },
  false
)

用电子5.0.1测试并跟随webPreferences测试BrowserWindow

{
  nodeIntegration: false,
  contextIsolation: true,
  enableRemoteModule: false,
  preload: path.join(__dirname, "preload.js")
}

这趟火车晚了一点,但可能仍然对您或其他Google员工有所帮助。

干杯,福特