Electron: Call renderer function from main

前端 未结 2 736
长情又很酷
长情又很酷 2021-02-15 17:27

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

相关标签:
2条回答
  • 2021-02-15 17:48

    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.

    0 讨论(0)
  • 2021-02-15 17:56

    You might use BrowserWindow.webContents.executeJavaScript like so in your main process:

    // will print "whoooooooh!" in the dev console
    window.webContents.executeJavaScript('console.log("whoooooooh!")');
    

    Although you might consider it a kinda messy/dirty approach, it works. And it does not require setting up anything in the renderer process which greatly simplified things for me.
    If you just want to call a particular method it would probably be quicker to write this way.

    0 讨论(0)
提交回复
热议问题