проблемы связи ipc в электронике - PullRequest
0 голосов
/ 27 июня 2018

Я создаю приложение, которое в основном читает файл базы данных 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();
    });

// теперь открывается второй процесс рендеринга, но он не имеет доступа к переменной 'test' и не печатает console.log внутри блока. введите описание изображения здесь

     ipcRenderer.on('get:popUpContents',(event,test) => {
     debugger;
     console.log(test);
     console.log('hellow world');
   });
   console.log('outside function');

1 Ответ

0 голосов
/ 28 июня 2018

Мне удалось решить это один день спустя. Нужно дождаться события готовности к загрузке в новом окне браузера, прежде чем заставлять его прослушивать входящее сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...