Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Electron: Call renderer function from main

I have some data in the localstorage that has to be deleted on app.quit(). But I see no way to do so from the main process.

Is there a way to call a renderer function from main?

I know about var remote = require('remote'); but it seems to go only in the wrong direction.

like image 805
Gordon Freeman Avatar asked Feb 29 '16 22:02

Gordon Freeman


1 Answers

You can send messages from the main process to a renderer process via webContents.send as called out in the documentation here: https://github.com/atom/electron/blob/master/docs/api/web-contents.md#webcontentssendchannel-arg1-arg2-.

Here is how you do it straight from the docs:

In the main process:

// In the main process.
var window = null;
app.on('ready', function() {
  window = new BrowserWindow({width: 800, height: 600});
  window.loadURL('file://' + __dirname + '/index.html');
  window.webContents.on('did-finish-load', function() {
    window.webContents.send('ping', 'whoooooooh!');
  });
});

In index.html:

<!-- index.html -->
<html>
<body>
  <script>
    require('electron').ipcRenderer.on('ping', function(event, message) {
      console.log(message);  // Prints "whoooooooh!"
    });
  </script>
</body>
</html>

Note it is asynchronous. I am not sure how that affects things with your particular solution, but this should at least get you talking back to the renderer process.

like image 82
Shawn Rakowski Avatar answered Nov 15 '22 19:11

Shawn Rakowski