javascript - electronjs中ipc通信的问题
问题描述
我正在构建一个基本上读取 sqlite3 数据库文件的应用程序。我有两个渲染过程。两个渲染进程都是在主进程中创建的。第二个渲染进程是通过在第一个渲染进程中单击特定按钮创建的,第一个渲染进程在该按钮上向主进程发送 ipcRenderer.send() 消息。
我的代码能够创建第二个渲染进程,但它无法访问它应该获取的数据。这是我的第一个问题,很抱歉它缺少一些协议。
第一个片段是主进程(app.js)中的代码
database.all(`SELECT _table_Name as name, _table_json as json
FROM _table_main WHERE _table_Name = "EWS Equipment Status Recording"`, (err, rows) => {
if (err) {
console.log(err.message);
}
mainWindow.webContents.send('query:ResultRows', rows);
});
// 第二个片段是第一个渲染过程
ipcRenderer.on('query:ResultRows',(event,rows) => {
var btn = document.createElement("BUTTON");
var t = document.createTextNode(rows[0].name);
btn.appendChild(t);
document.body.appendChild(btn);
var test = rows;
btn.addEventListener('click', function() {
ipcRenderer.send('show:popUpContents', test);
console.log(rows);
});
});
现在在主进程(app.js)上监听第二个片段
ipcMain.on('show:popUpContents',(event,test) =>{
popWindow = new BrowserWindow({ });
popWindow.loadURL(url.format({
pathname: path.join(__dirname, 'pop-up.html'),
protocol: 'file:',
slashes: true
}));
popWindow.webContents.send('get:popUpContents', test);
console.log(test);
console.log(popWindow.webContents);
popWindow.webContents.openDevTools();
});
// 现在第二个渲染进程打开,但它无法访问“测试”变量,也不会在块内打印 console.log。在此处输入图像描述
ipcRenderer.on('get:popUpContents',(event,test) => {
debugger;
console.log(test);
console.log('hellow world');
});
console.log('outside function');
解决方案
一天后,我设法自己解决了这个问题。需要等待新浏览器窗口的“准备加载”事件,然后才能侦听传入消息。
推荐阅读
- visual-studio-code - “Databricks-connect 测试”过程未结束
- vb.net - 如何更改文件夹中选定图像的设置?
- typescript - 如何创建一个触发 OneDrive 文件的函数,就像我可以在 BlobStorage 上做的那样?
- c - 从 LinkedList 中释放节点(内存方面)
- java - 如何将字符串值从活动发送到适配器?
- reactjs - 处理此文件类型的适当加载程序。/index.esm.js
- python - 将图像裁剪为列
- java - 线程“主”org.springframework.beans.factory.NoSuchBeanDefinitionException 中的异常:没有命名的 bean
- android - 我应该将什么上下文传递给 SQLite
- javascript - 对象和对象类型有什么区别