Итак, я создаю приложение с использованием платформы 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.info(arg);
})
</script>
Я знаю, что этот вопрос задавался здесь раньше, и я просмотрел другие примеры, но пока они не сработали.
Событие 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();
});