Electron JS. Задайте имя окна или укажите, какое окно генерирует событие - PullRequest
0 голосов
/ 12 февраля 2020

Есть ли способ определить, какое окно генерирует событие, используя ipcRenderer, чтобы подписаться на это окно и слушать внешние события? Обработчик событий выглядит следующим образом:

_registerListener(event, {windowName, id, eventName}) {

    this._ems[id].on(eventName, (value)=>{
        this._windows[windowName].webContents.send(eventName, value);
    });
}

Частичное решение, которое я нашел, состоит в том, чтобы установить свойство name окна в контексте WebRenderer. Единственный способ, который я нашел, это использовать метод execute JavaScript при создании BrowserWindow:

mainWindow.webContents.executeJavaScript("window.name='mainWindow';");

Но это решение не работает для меня, потому что сценарий, переданный этому методу, выполняется после того, как сценарии связаны в заголовке HTML.

Есть ли другой способ выбрать имя BrowserWindow или идентифицировать его?

Спасибо.

1 Ответ

0 голосов
/ 12 февраля 2020

Решение найдено. Мы могли бы идентифицировать окно по его webContent. Electron ipcEvent имеет поле sender , которое представляет веб-содержимое окна. Поэтому в моем случае решение состоит в том, чтобы сделать замыкание следующим образом:

 _registerListener(event, {id, eventName}) {

    this._ems[id].on(eventName, (value)=>{
        event.sender.webContents.send(eventName, value);
    });
 }
...