Javascript 电子商务;他们不能互相交流
我正在用electron js编写一个桌面应用程序,我想将数据从主进程发送到渲染器进程,反之亦然。为此,我使用了Javascript 电子商务;他们不能互相交流,javascript,node.js,electron,ipc,Javascript,Node.js,Electron,Ipc,我正在用electron js编写一个桌面应用程序,我想将数据从主进程发送到渲染器进程,反之亦然。为此,我使用了ipcdain和ipcdrenderer,但奇怪的是,虽然能够使用ipcdrenderer.send()通过我的渲染器发送数据,但我无法使用ipcdrenderer.on()从我的主进程接收任何数据。只是因为某些原因它不起作用 之后,我根据electron的文档编写了一个测试,试图找到这个bug。但是,测试根本不起作用,因为两个进程似乎都无法向另一个进程发送内容。这是我为测试编写的代码
ipcdain
和ipcdrenderer
,但奇怪的是,虽然能够使用ipcdrenderer.send()
通过我的渲染器发送数据,但我无法使用ipcdrenderer.on()
从我的主进程接收任何数据。只是因为某些原因它不起作用
之后,我根据electron的文档编写了一个测试,试图找到这个bug。但是,测试根本不起作用,因为两个进程似乎都无法向另一个进程发送内容。这是我为测试编写的代码:
main.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';
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test, please work</title>
</head>
<body>
<script src="./app.js"></script>
</body>
</html>
index.html:
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';
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test, please work</title>
</head>
<body>
<script src="./app.js"></script>
</body>
</html>
以下是渲染器记录的内容:
{ error: "reply was never sent" }
下面是我获取代码的文档链接:发生这种情况是因为您连接事件处理程序太晚了 您仅在加载页面并且启动了准备显示的
后添加ipcMain.on
。您应该更早地设置它们,就像在创建窗口之前一样,或者删除await createWin()
中的await
作为参考,Electron抛出错误我看不到“从未发送回复”被记录在哪里。这是来自Electronso的东西吗?您不能在异步消息处理程序中中断?错误消息正在浏览器窗口中记录。我怎样才能进入异步消息处理程序@非常感谢你的帮助