[英]Electron ipcMain & ipcRenderer fail to communicate with each other
我正在用 electron js 編寫一個桌面應用程序,我想將數據從我的主進程發送到我的渲染器進程,反之亦然。 為此,我正在使用ipcMain
和ipcRenderer
,但奇怪的是,雖然能夠使用ipcRenderer.send()
ipcRenderer.on()
我的主進程接收任何數據。 它只是由於某種原因不起作用。
之后,我嘗試按照電子的文檔編寫測試來查找錯誤。 然而,該測試根本不起作用,因為兩個進程似乎都無法向另一個進程發送一些東西。 這是我為測試編寫的代碼:
主.js :
const { app, ipcMain, BrowserWindow } = require('electron');
const createWin = async () => {
const win = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
},
});
win.loadFile('./index.html');
return new Promise((resolve, reject) => {
win.once('ready-to-show', () => {
resolve();
});
});
};
app.whenReady().then(async () => {
const win = await createWin();
console.log('Ready to show');
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg); // prints "ping"
event.reply('asynchronous-reply', 'pong');
});
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg); // prints "ping"
event.returnValue = 'pong';
});
});
索引.html :
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test, please work</title>
</head>
<body>
<script src="./app.js"></script>
</body>
</html>
應用程序.js:
const { ipcRenderer } = require('electron');
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // prints "pong"
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg); // prints "pong"
});
ipcRenderer.send('asynchronous-message', 'ping');
以下是渲染器記錄的內容:
{ error: "reply was never sent" }
這是我從中獲取代碼的文檔的鏈接: https://www.electronjs.org/docs/api/ipc-main#sending-messages
發生這種情況是因為您連接事件處理程序太晚了。
您僅在頁面加載並ready-to-show
觸發后添加ipcMain.on
。 您應該更早地設置它們,就像在創建 window 之前一樣,或者只是刪除await
await createWin()
中的等待。
作為參考, Electron 在這里拋出錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.