Window to Window Messaging with @electron/remote

We create open-source because we love it, and we share our finding so everyone else can benefit as well.

electron ipc system

Window to Window Messaging with @electron/remote

In a previous article, I covered how to accomplish Window to Window Communication in Electron with a message passing system. Since Electron 14 removed the remote module, this system will not work in older versions. So in this article we will discuss how to upgrade this window to window messaging system to use @electron/remote.

To keep this article short, I will only talk about the system briefly, so if you haven’t read the previous article, please check out Window to Window Communication in Electron.

Getting Started with @electron/remote

So previously we created a message system in Electron’s main process to handle, or broker messages from our different windows, returning replies to the windows requesting data. Since Electron has removed the needed remote module, we’ll be installing and configuring the app to use @electron/remote. Like anything else, we first need to install our module:

$ yarn add @electron/remote

Once installed we need to update Electron’s main file to use the new remote module. First add the module import after your other imports, and call the initialize method of the module. This will enable the remote module on our electron objects.

require('@electron/remote/main').initialize()

After we create our BrowserWindow in the main file, we also want to enable webContents for our windows. We can do this with a listener on our app object, which should be placed near our other app listeners (‘ready’, ‘activate’, etc).

app.on('browser-window-created', (_, window) => {
  require('@electron/remote/main').enable(window.webContents)
})

Let’s now move on to our messaging system.

Window to Window Messaging

Secondary Window Function

So some of the biggest hurdles come from updating the way secondary windows need to be updated. We lose some functionality, but we do have other options to replace it. Here’s the code for the previous versions of Electron.

// windows.js Electron < 14.x
const windowList = [] // shared array

function createWindow(windowOptions, windowPath, winRegex) {
  if(!windowList.filter(winItem => winItem.webContents.browserWindowOptions.title && winRegex.test(winItem.webContents.browserWindowOptions.title)).length) 
{
    let win = new BrowserWindow(Object.assign(windowOptions))
    win.loadURL(windowPath)
    windowList.push(win)

    win.on('close', () => {
      // remove window when it is closed
      windowList.splice(windowList.indexOf(win), 1)
    })
  } else {
    // if window already open, focus
    windowList.filter(winItem => winItem.webContents.browserWindowOptions.title && winRegex.test(winItem.webContents.browserWindowOptions.title))[0].focus()
  }
}

const aboutPath = process.env.NODE_ENV === 'development' ? path.join('file://', process.cwd(), 'src', 'about.html') : path.join('file://', __dirname, 'about.html')

const aboutRegex = /^About MyApp$/

// example use
createWindow({
  title: 'About MyApp',
  width: 300,
  height: process.platform !== 'darwin' ? 330 : 300,
  maxHeight: 330,
  maxWidth: 300,
  minWidth: 300,
  minHeight: 300,
  frame: process.platform !== 'darwin' ? true : false,
  webPreferences: {
    devTools: process.env.NODE_ENV === 'development',
    nodeIntegration: true
  }
}, aboutPath, aboutRegex);

module.exports = {
  createWindow: createWindow
  windowList: windowList
}

To check if a window exists, we check if the property exists, and then compare with the webContents title. When the window closes, we use this same method to find the correct window to remove. Lastly, we need to add a line which will add the webContents object to our windows. So to fix this, we refactor to use the getTitle function.

// windows.js Electron > 14.x with @electron/remote
const windowList = [] // shared array

function createWindow(windowOptions, windowPath, winRegex) {
  if(!windowList.filter(winItem => winRegex.test(winItem.getTitle())).length) {
    let win = new BrowserWindow(Object.assign(windowOptions))
    win.loadURL(windowPath)
    windowList.push(win)

    win.on('close', () => {
      // remove window when it is closed
      windowList.splice(windowList.indexOf(win), 1)
    })

    require('@electron/remote/main').enable(window.webContents)
  } else {
    // if window already open, focus
    windowList.filter(winItem => winRegex.test(winItem.getTitle()))[0].focus()
  }
}

...

With these lines replaced, we can start the app, and at least test that our windows open correctly.

Main Process Message Broker

To fix the code for our Window to Window Communication, we now need to update our IPC listeners in our main process. Let’s quickly review the older code:

// main.js Electron < 14.x
...

ipcMain.on('message-main-request', (event, fromWindowId, toWindowTitle, withWindowEvent, ...args) => {
  let toWindowId = windowList.filter(w => w.webContents.browserWindowOptions.title === toWindowTitle)[0].id
  let browserWindow = BrowserWindow.fromId(toWindowId)
  browserWindow.webContents.send(withWindowEvent, fromWindowId, ...args)
});

ipcMain.on('message-request-reply', (event, fromWindowId, withWindowEvent, ...args) => {
  let browserWindow = BrowserWindow.fromId(fromWindowId)
  browserWindow.webContents.send(withWindowEvent, fromWindowId, ...args)
})

...

Both of these listeners listen for messages from the render process, and send a reply to the window defined by the window sending the first message. First we run into the same issue, where we’re trying to read the title from the WindowOptions, which we will replace with getTitle again. Next we need to change the listener methods used by ipcMain, and use the newer methods.

// main.js Electron > 14.x with @electron/remote
...

ipcMain.handle('message-main-request', (event, fromWindowId, toWindowTitle, withWindowEvent, ...args) => {
  let toWindowId = windowList.filter(w => w.getTitle() === toWindowTitle)[0].id
  let browserWindow = BrowserWindow.fromId(toWindowId)
  browserWindow.webContents.send(withWindowEvent, fromWindowId, ...args)
});

ipcMain.handle('message-request-reply', (event, fromWindowId, withWindowEvent, ...args) => {
  let browserWindow = BrowserWindow.fromId(fromWindowId)
  browserWindow.webContents.send(withWindowEvent, fromWindowId, ...args)
})

As you can see, we use the getTitle function for our condition to find the correct window, and then we set ipcMain to use the handle eventListener.

Renderer Process Messages

Let now finish up with our renderer process messengers. In the AboutWindow file we were using a message-request call to send a message request to another window, and then a message-response listener for messages sent to that window relayed through the main process.

// AboutWindow.js Electron < 14.x

import { remote, ipcRenderer } from 'electron' 

constructor(props) {
  super(props)

  this.current = remote.getCurrentWindow()
}

componentDidMount() {
  this.interval = setInterval(() => {
    ipcRenderer.send('message-main-request', this.current.id, 'MyApp', 'message-request')
  }, 2000)

  ipcRenderer.on('message-main-response', (event, windowId, reduxData) => this.setState({reduxState: reduxData}))
}

Before we fix anything else, we need to update the module used for our remote module, switching to @electron/remote. Next, we no longer want to use the send function, so we’ll replace that with the new invoke function. Everything else can stay the same.

Note: The @electron/remote import must use ES5 syntax

// AboutWindow.js Electron > 14.x with @electron/remote

import { ipcRenderer } from 'electron'
const remote = require('@electron/remote')

constructor(props) {
  super(props)

  this.current = remote.getCurrentWindow()
}

componentDidMount() {
  this.interval = setInterval(() => {
    ipcRenderer.invoke('message-main-request', this.current.id, 'MyApp', 'message-request')
  }, 2000)

  ipcRenderer.on('message-main-response', (event, windowId, reduxData) => this.setState({reduxState: reduxData}))
}

Moving on to our App.js file, we listen for a message-request event passed through the main process, and the use the message-request-reply to return the reply to main.

// App.js Electron < 14.x

componentDidMount() {
  ipcRenderer.on('message-request', (event, fromWindowId, _type) => event.sender.send('message-request-reply', fromWindowId, 'message-main-response', this.stateUpdate()))
}

stateUpdate = () => this.props.state

With this file, we only need to replace the old event reply method, and then our message system is functional again.

// App.js Electron > 14.x with @electron/remote

componentDidMount() {
  ipcRenderer.on('message-request', (event, fromWindowId, _type) => ipcRenderer.invoke('message-request-reply', fromWindowId, 'message-main-response', this.stateUpdate()))
}

stateUpdate = () => this.props.state

Summary

That’s all that’s needed to replace remote in our Window-to-Window Communication system with @electron/remote. Everything works the same, but a few different corner-cases can keep the transition from working flawlessly, especially the webContents enabling.

 

Comments: 547

  1. Mazrvek says:

    Быстрое обучение и получение диплома магистра – возможно ли это?
    mans-diplom.ru

  2. Mazrpjp says:

    Как безопасно купить диплом колледжа или ПТУ в России, что важно знать
    rushkas-diplomyxx.ru

  3. Mazrvjj says:

    Как быстро и легально купить аттестат 11 класса в Москве

    rushkas-diplomxx.ru

  4. Mazravk says:

    Полезные советы по безопасной покупке диплома о высшем образовании
    mandiplomik.ru

  5. Mazrjis says:

    Покупка школьного аттестата с упрощенной программой: что важно знать

    asxdiplomik24.ru

  6. Lazrchh says:

    Процесс получения диплома стоматолога: реально ли это сделать быстро?
    linkcentre.com/profile/originaldipl

  7. Lazretn says:

    Возможно ли купить диплом стоматолога, и как это происходит

    edu1seo.blogspot.com/2024/08/originaldipl

  8. Lazrxps says:

    Вопросы и ответы: можно ли быстро купить диплом старого образца?

    fanart-central.net/user/originaldipl/profile

  9. Lazrlup says:

    Всё, что нужно знать о покупке аттестата о среднем образовании без рисков

    fmscout.com/users/originaldipl

  10. Mazrizv says:

    Как приобрести аттестат о среднем образовании в Москве и других городах
    ast-diplomy24.ru

  11. Mazrpkq says:

    Аттестат 11 класса купить официально с упрощенным обучением в Москве

    diplomyx-rushka.ru

  12. Mazrzvr says:

    Сколько стоит диплом высшего и среднего образования и как это происходит?

    mans-diplomas.ru

  13. Lazrrqm says:

    Официальная покупка диплома вуза с сокращенной программой обучения в Москве
    landenhlic06285.bloggerswise.com/35352713/the-ultimate-guide-to-buying-a-school-leaving-certificate-diploma-and-a-lot-more

  14. Lazreqy says:

    Официальное получение диплома техникума с упрощенным обучением в Москве
    guilded.gg/u/originaldipl

  15. Lazriez says:

    Стоимость дипломов высшего и среднего образования и как избежать подделок
    11secondclub.com/users/profile/1594629

  16. Lazrfof says:

    Легальная покупка диплома ПТУ с сокращенной программой обучения

    cruzrepz60593.bloggazza.com/28217111/the-ultimate-guideline-to-buying-a-school-leaving-certificate-diploma-and-even-more

  17. Lazrrlf says:

    Сколько стоит диплом высшего и среднего образования и как его получить?
    louismjew73951.alltdesign.com/the-ultimate-guide-to-purchasing-a-school-leaving-certificate-diploma-and-even-more-48598298

  18. Mazrony says:

    Быстрое обучение и получение диплома магистра – возможно ли это?
    rushkadiplomiks.ru

  19. Mazrmns says:

    Официальная покупка диплома вуза с упрощенной программой обучения

    diplomrushkan.ru

  20. Mazrsqc says:

    Аттестат школы купить официально с упрощенным обучением в Москве
    rushkas-diplomyxx.ru

  21. Lazrkke says:

    Сколько стоит диплом высшего и среднего образования и как его получить?

    linktr.ee/originaldipl

  22. Mazrgev says:

    Как получить диплом техникума официально и без лишних проблем

    diploms-man.ru

  23. Mazrasr says:

    Официальная покупка диплома вуза с сокращенной программой в Москве

    asxdiplomik.com

  24. Lazrqva says:

    Сколько стоит диплом высшего и среднего образования и как его получить?
    originaldipl.amebaownd.com/posts/54857272

  25. Lazrpdz says:

    Возможно ли купить диплом стоматолога, и как это происходит

    beaudtiv50505.shotblogs.com/the-ultimate-guide-to-buying-a-school-leaving-certificate-diploma-and-a-lot-more-42861235

  26. Mazrnzo says:

    Полезные советы по покупке диплома о высшем образовании без риска
    diplomyx-rushka.ru

  27. Mazrzqn says:

    Как получить диплом техникума с упрощенным обучением в Москве официально

    mans-diplomy.ru

  28. Lazrcyk says:

    Удивительно, но купить диплом кандидата наук оказалось не так сложно
    forums.zeiss.com/microscopy/community/memberlist.php?mode=viewprofile&u=11231

  29. Mazryzl says:

    Купить диплом о среднем полном образовании, в чем подвох и как избежать обмана?

    diplomrushka.ru

  30. Lazrldr says:

    Быстрая схема покупки диплома старого образца: что важно знать?

    andyfmmj30741.life3dblog.com/28180752/the-ultimate-guideline-to-buying-a-school-leaving-certificate-diploma-and-a-lot-more

  31. Mazroft says:

    Купить диплом о среднем полном образовании, в чем подвох и как избежать обмана?
    diplomasx24.ru

  32. Mazrbwb says:

    Купить диплом о среднем полном образовании, в чем подвох и как избежать обмана?
    diplomrushkan.ru

  33. Cazrkvo says:

    Быстрая покупка диплома старого образца: возможные риски

    dosaaf.ru/images/pgs/gde_kupit_diplom_bezopasno_i_nadezghn

  34. Sazraia says:

    Как оказалось, купить диплом кандидата наук не так уж и сложно

    forum-rassvet-rp.ru/index.php?app=gallery&module=gallery&controller=view&id=74

  35. Cazrjag says:

    Реально ли приобрести диплом стоматолога? Основные этапы
    muza.vip/crons/pgs/gde_kupit_diplom_instituta_bez_problem_i_lishnih_voprosov

  36. Sazrfzb says:

    Как оказалось, купить диплом кандидата наук не так уж и сложно

    togethers.mn.co/posts/65294072

  37. Lazraaz says:

    Можно ли быстро купить диплом старого образца и в чем подвох?
    jaredyjoo53186.bloggip.com/28804822/the-ultimate-guide-to-buying-a-school-leaving-certificate-diploma-plus-much-more

  38. Cazripe says:

    Как купить диплом о высшем образовании с минимальными рисками
    sbmk.org/css/pgs/kupit_diplom_universiteta__gde_nayti_i_na_chto_obratit_vnimanie

  39. Cazrslx says:

    Диплом вуза купить официально с упрощенным обучением в Москве

    cockpit.ru/img/pgs/kak_kupit_diplom_kotoruy_proydet_lubue_proverki_i_garantiruet_uspeh

  40. Cazruam says:

    Всё о покупке аттестата о среднем образовании: полезные советы

    sbereg.ru/pages/gde_kupit_provedennuy_diplom_v_moskve_legalno_i_bustro

  41. Sazrazm says:

    Быстрое обучение и получение диплома магистра – возможно ли это?
    demo.advised360.com/read-blog/165185

  42. Sazrncg says:

    Процесс получения диплома стоматолога: реально ли это сделать быстро?

    network-77917.mn.co/posts/65294212

  43. Sazrirq says:

    Узнайте стоимость диплома высшего и среднего образования и процесс получения
    gazony.com/club/user/2/blog/804

  44. Mazrhuh says:

    Приобретение диплома ПТУ с сокращенной программой обучения в Москве
    rushkas-diploms.ru

  45. Lazrlze says:

    Полезные советы по безопасной покупке диплома о высшем образовании
    felixvyvu96409.uzblog.net/the-ultimate-guide-to-buying-a-school-leaving-certificate-diploma-and-even-more-42976069

  46. Lazrwvw says:

    Диплом вуза купить официально с упрощенным обучением в Москве

    jeffreyndjk63186.bloggosite.com/35259538/the-ultimate-guideline-to-buying-a-school-leaving-certificate-diploma-and-even-more

  47. Mazrmtk says:

    Всё, что нужно знать о покупке аттестата о среднем образовании

    rushkadiplomik.ru

  48. Cazrkvk says:

    Легальная покупка диплома о среднем образовании в Москве и регионах

    cockpit.ru/img/pgs/kak_kupit_diplom_kotoruy_proydet_lubue_proverki_i_garantiruet_uspeh

  49. Mazrzjw says:

    Как безопасно купить диплом колледжа или ПТУ в России, что важно знать

    ast-diplomas24.ru

  50. Sazrwju says:

    Удивительно, но купить диплом кандидата наук оказалось не так сложно
    kbb-hub.mn.co/posts/65295490

  51. Cazriaa says:

    Покупка диплома о среднем полном образовании: как избежать мошенничества?
    medgorodok.ru/files/pages/?gde_kupit_diplom_v_rf_legalno_i_bezopasno

  52. Sazregn says:

    Официальная покупка диплома ПТУ с упрощенной программой обучения
    g29869x8.beget.tech/2024/08/23/pochemu-nash-internet-magazin-vybirayut-esli-nado-kupit-attestat

  53. Sazrbng says:

    Быстрая схема покупки диплома старого образца: что важно знать?

    drawing-tips-and-anime-manga-discussion.mn.co/posts/65294287

  54. Cazrbdq says:

    Купить диплом магистра оказалось возможно, быстрое обучение и диплом на руки
    apteka.podolsk.ru/dis/pgs/gde_kupit_diplom_s_vkladushem_bustro_i_nadezghno

  55. Sazrgnw says:

    Приобретение диплома ПТУ с сокращенной программой обучения в Москве

    unguka.com/read-blog/21688

  56. Mazrmbi says:

    Приобретение диплома ПТУ с сокращенной программой обучения в Москве
    diplomyx24.ru

  57. Sazryen says:

    Полезная информация как купить диплом о высшем образовании без рисков

    datasheetclub.com/read-blog/270

  58. Sazrwjl says:

    Парадокс, но купить диплом кандидата наук оказалось не так и сложно

    socialnetwork.cloudyzx.com/read-blog/23914

  59. Mazrfmg says:

    Диплом вуза купить официально с упрощенным обучением в Москве
    asxdiplomik24.ru

  60. Mazrnns says:

    Быстрое обучение и получение диплома магистра – возможно ли это?

    rushkas-diploms.ru

  61. Sazrlmz says:

    Как безопасно купить диплом колледжа или ПТУ в России, что важно знать

    p91648f6.beget.tech/2024/08/23/nado-priobresti-diplom-zaydite-v-luchshiy-onlayn-magazin

  62. Cazrlsi says:

    Как получить диплом техникума с упрощенным обучением в Москве официально
    ruminus.ru/pages/pag/gde_kupit_diplom_s_provodkoy_po_dostupnoy_cene

  63. Cazrdkw says:

    Легальная покупка диплома о среднем образовании в Москве и регионах

    sbereg.ru/pages/gde_kupit_provedennuy_diplom_v_moskve_legalno_i_bustro

  64. Cazrlur says:

    Покупка диплома о среднем полном образовании: как избежать мошенничества?
    chacom.ru/archive/pages/kak_vubrat_i_kupit_diplom_rossiyskogo_vuza_bezopasno_i_legalno

  65. Sazrhfb says:

    Как избежать рисков при покупке диплома колледжа или ПТУ в России
    network-6247558.mn.co/posts/65294857

  66. Cazrtlv says:

    Как оказалось, купить диплом кандидата наук не так уж и сложно
    yoga-spb.ru/files/pgs/kak_legalno_i_bustro_kupit_diplom_gosudarstvennogo_universiteta_v_rossii

  67. Cazrnna says:

    Официальное получение диплома техникума с упрощенным обучением в Москве
    ulfishing.ru/includes/kls/gde_kupit_diplom_instituta_bez_problem_i_lishnih_voprosov_1

  68. Sazruhz says:

    Официальная покупка диплома вуза с сокращенной программой обучения в Москве
    belconsole.ru/club/user/11870/blog/2225

  69. Sazruik says:

    Возможно ли купить диплом стоматолога, и как это происходит
    charleston-wiffleball-association.mn.co/posts/65294887

  70. Cazrnwh says:

    Быстрая покупка диплома старого образца: возможные риски
    apteka.podolsk.ru/dis/pgs/gde_kupit_diplom_s_vkladushem_bustro_i_nadezghno

  71. Cazrufu says:

    Парадокс, но купить диплом кандидата наук оказалось не так и сложно
    yoga-spb.ru/files/pgs/kak_legalno_i_bustro_kupit_diplom_gosudarstvennogo_universiteta_v_rossii

  72. Sazrfsb says:

    Узнайте стоимость диплома высшего и среднего образования и процесс получения

    gotech.mn.co/posts/65294649

  73. Sazrtiz says:

    Покупка диплома о среднем полном образовании: как избежать мошенничества?

    lastdemo.primepix.ru/club/user/88/blog/9397

  74. Cazrami says:

    Аттестат 11 класса купить официально с упрощенным обучением в Москве

    puppets.kr.ua/polygraphy/inc/gde_kupit_diplom_s_reestrom_bezopasno_i_legalno_

  75. Cazrexc says:

    Официальная покупка диплома ВУЗа с упрощенной программой обучения
    apteka.podolsk.ru/dis/pgs/gde_kupit_diplom_s_vkladushem_bustro_i_nadezghno

  76. Cazrumy says:

    Как оказалось, купить диплом кандидата наук не так уж и сложно

    bigpowernews.ru/files/pgs/23gde_kupit_diplom_starogo_obrazca_bustro_i_nadezghno

  77. Sazrlsk says:

    Узнайте стоимость диплома высшего и среднего образования и процесс получения

    regionalhilfesozial.mn.co/posts/65295573

  78. Sazrrbx says:

    Приобретение диплома ПТУ с сокращенной программой обучения в Москве

    aipair.io/read-blog/153

  79. Sazrdzc says:

    Легальная покупка школьного аттестата с упрощенной программой обучения

    friendzone.bigbosslabel.com/read-blog/6019

  80. Sazrivs says:

    Полезная информация как купить диплом о высшем образовании без рисков

    strati.club/read-blog/11745

  81. Sazrbtm says:

    Как избежать рисков при покупке диплома колледжа или ПТУ в России

    picbok.org/read-blog/9062

  82. Cazrvso says:

    Легальная покупка диплома о среднем образовании в Москве и регионах

    magicmag.net/image/pgs/?kak_kupit_diplom_v_nadezghnoy_kompanii_i_ne_stat_zghertvoy_moshennikov

  83. Cazrzvu says:

    Как получить диплом стоматолога быстро и официально

    bigpowernews.ru/files/pgs/23gde_kupit_diplom_starogo_obrazca_bustro_i_nadezghno

  84. Sazrboa says:

    Полезные советы по безопасной покупке диплома о высшем образовании

    belconsole.ru/club/user/11870/blog/2225

  85. Sazryuh says:

    Парадокс, но купить диплом кандидата наук оказалось не так и сложно

    transfer-tur.ru/ru/cb-profile/pluginclass/cbblogs?action=blogs&func=show&id=239

  86. Sazrclk says:

    Всё, что нужно знать о покупке аттестата о среднем образовании без рисков
    upuge.com/read-blog/43875_gde-kupit-luchshe-diplom-vuza-obzor-populyarnogo-onlajn-magazina

  87. Arnottihr says:

    consists of the book itself

Add your comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.