首页 > 解决方案 > 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');

标签: javascriptsqlsqliteelectron

解决方案


一天后,我设法自己解决了这个问题。需要等待新浏览器窗口的“准备加载”事件,然后才能侦听传入消息。


推荐阅读