Electron:从 main 调用渲染器函数
Electron: Call renderer function from main
我在本地存储中有一些数据必须在 app.quit()
上删除。但是我从主要过程中看不到这样做的方法。
有没有办法从 main
调用 renderer
函数?
我知道 var remote = require('remote');
但它似乎只是走错了方向。
您可以通过 webContents.send 将消息从主进程发送到渲染器进程,如此处文档中所述:https://github.com/atom/electron/blob/master/docs/api/web-contents.md#webcontentssendchannel-arg1-arg2-。
以下是直接从文档中进行操作的方法:
在主进程中:
// 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!');
});
});
在index.html中:
<!-- index.html -->
<html>
<body>
<script>
require('electron').ipcRenderer.on('ping', function(event, message) {
console.log(message); // Prints "whoooooooh!"
});
</script>
</body>
</html>
注意它是异步的。我不确定这对您的特定解决方案有何影响,但这至少应该让您回到渲染器进程。
您可以在主进程中像这样使用 BrowserWindow.webContents.executeJavaScript:
// will print "whoooooooh!" in the dev console
window.webContents.executeJavaScript('console.log("whoooooooh!")');
尽管您可能认为这是一种 messy/dirty 方法,但它确实有效。而且它不需要在渲染器过程中设置任何东西,这对我来说大大简化了事情。
如果你只是想调用一个特定的方法,这样写可能会更快。
我在本地存储中有一些数据必须在 app.quit()
上删除。但是我从主要过程中看不到这样做的方法。
有没有办法从 main
调用 renderer
函数?
我知道 var remote = require('remote');
但它似乎只是走错了方向。
您可以通过 webContents.send 将消息从主进程发送到渲染器进程,如此处文档中所述:https://github.com/atom/electron/blob/master/docs/api/web-contents.md#webcontentssendchannel-arg1-arg2-。
以下是直接从文档中进行操作的方法:
在主进程中:
// 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!');
});
});
在index.html中:
<!-- index.html -->
<html>
<body>
<script>
require('electron').ipcRenderer.on('ping', function(event, message) {
console.log(message); // Prints "whoooooooh!"
});
</script>
</body>
</html>
注意它是异步的。我不确定这对您的特定解决方案有何影响,但这至少应该让您回到渲染器进程。
您可以在主进程中像这样使用 BrowserWindow.webContents.executeJavaScript:
// will print "whoooooooh!" in the dev console
window.webContents.executeJavaScript('console.log("whoooooooh!")');
尽管您可能认为这是一种 messy/dirty 方法,但它确实有效。而且它不需要在渲染器过程中设置任何东西,这对我来说大大简化了事情。
如果你只是想调用一个特定的方法,这样写可能会更快。