Как отправлять данные между родительским и дочерним окном в electron

Итак, я создаю приложение с использованием платформы Electron и пытаюсь передать некоторые данные между родительским окном и дочерним окном, когда я открываю дочернее окно по событию щелчка из родительского окна. Я использую ipcMain и ipcRenderer, чтобы передать сообщение от родительского процесса рендеринга основному процессу дочернему процессу рендеринга. Я могу отслеживать данные, поступающие в основной процесс, но они не отправляются в окончательный рендерер. Я не совсем уверен, почему, но моя интуиция такова, что это как-то связано с координацией событий открытия дочернего окна из основного по сравнению с отправкой данных через .webContents.send () из основного.

Соответствующий код:

Отправка данных от родителя к основному

listItem.click(function(){
    ipcRenderer.send('synchronous-message',feedUrl);
})

Прослушивание данных в основном, инициализация и открытие дочернего окна и отправка данных в дочернее окно

let winPodInfo;
ipcMain.on('synchronous-message',(event,arg)=>{

winPodInfo = new BrowserWindow({
   width:500,
   parent:mainWindow,
   modal:true,
   frame:false
});

winPodInfo.loadURL(`file://${__dirname}/podcastInfo.html`);
winPodInfo.once('show',function(){
   winPodInfo.webContents.send('synchronous-message',arg);
})
winPodInfo.once('ready-to-show', () => {
   winPodInfo.show();
});
})

Проверка сообщения в дочернем рендерере

    <script>
    const electron = require('electron');   
    const {ipcRenderer} = electron;

    ipcRenderer.on('synchronous-message',(event,arg)=>{
        console.log(arg);
    })
    </script>

Я знаю, что этот вопрос задавался здесь раньше, и я просмотрел другие примеры, но пока они не сработали.

0
0
4 325
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Событие Window.on('show') не запускается, пока вы не установите show: false в параметрах окна.

winPodInfo = new BrowserWindow({
  show: false
});

winPodInfo.once("show", function() {
  winPodInfo.webContents.send("channel", arg);
});

winPodInfo.once("ready-to-show", () => {
  winPodInfo.show();
});

Другие вопросы по теме