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
forBrowserWindow
):
{
nodeIntegration: false,
contextIsolation: true,
enableRemoteModule: false,
preload: path.join(__dirname, "preload.js")
}