![](/img/trans.png)
[英]ElectronJS: Uncaught TypeError: ipcRenderer.on is not a function
[英]Electronjs ipcRenderer.on not working properly
我正在嘗試將數據從主進程發送到渲染器並且正在執行 ipcRenderer.on function 但數據未定義......
這是發送數據的代碼:
mainWindow.webContents.on("did-finish-load", () => {
let name = "test";
mainWindow.webContents.send("updateSave", name);
})
這是接收它:
ipcRenderer.on("updateSave", (e, data) => {
console.log("data: " + data);
})
console.log 正在被解雇,但它只是說:數據:未定義
這是預加載文件:
contextBridge.exposeInMainWorld("ipcRenderer", {
send: (channel, ...args) => ipcRenderer.send(channel, ...args),
on: (channel, func) => ipcRenderer.on(channel, (event, ...args) => func(...args))
});
有人知道我做錯了什么嗎? 謝謝
在您的preload.js
中,您定義ipcRenderer.on()
如下:
on: (channel, func) => {
ipcRenderer.on(
channel,
(event, ...args) => {
func(...args)
}
)
}
因此, event
永遠不會傳遞給func()
並因此被吞噬。 現在,有兩種可能的解決方案(就個人而言,我將 go 與 (1) 結合使用,因為它最容易實現,並且會使兩部分的代碼更清晰。但是,請參閱下面的評論):
(1) 您想在渲染器中保留簽名
也就是說,你仍然想寫ipcRenderer.on("channel", (event, data) => {});
. 然后你將不得不改變你的預加載代碼。 我建議像這樣簡單地將func
傳遞給 ipcRenderer:
on: (channel, func) => ipcRenderer.on (channel, func)
然后,任何func
參數都必須具有簽名(event, ...data) => {}
。
(2) 您想在預加載中保留簽名
即,您想保留預加載contextBridge
定義的代碼。 然后,渲染器代碼中的任何ipcRenderer.on()
實例都需要更改以適應簽名(...data) => {}
,因為沒有event
參數傳遞給 function。
作為旁注,如果在使用預加載腳本進行代理時不將 Electron API function(例如ipcRenderer.on()
、 ipcRenderer.send()
等)暴露給渲染器,而是提供離散的,這被認為是最佳實踐供您的渲染器代碼選擇的功能,如Electron 的官方 IPC 教程所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.