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

electron-window.postMessage用于在预加载和具有特定目标原点的渲染器之间进行对话,electron,Electron,我想使用postMessage的targetOrigin在preload.js和renderer.js之间验证/区分消息的来源,并启用contextIsolation 因此,如果消息来自preload.js,则原始目标类似于file://preload.js,并从渲染器file://renderer.js 设置file://preload.js或file://renderer.js,使错误无法在“DOMWindow”上执行“postMessage”:提供的目标源('file://')与收件人窗口

我想使用
postMessage
targetOrigin
preload.js
renderer.js
之间验证/区分消息的来源,并启用contextIsolation

因此,如果消息来自
preload.js
,则原始目标类似于
file://preload.js
,并从渲染器
file://renderer.js

设置<代码>file://preload.js或
file://renderer.js
,使错误
无法在“DOMWindow”上执行“postMessage”:提供的目标源('file://')与收件人窗口的源('file://')不匹配。

有人知道如何实现我想要实现的吗? 谢谢

引用:

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

因此,在
preload.js
中,您需要使用
*
作为
targetOrigin

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
)
这也适用于更严格的配置,如下所示(
webPreferences
for
BrowserWindow
):

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