在电子应用中发出自定义事件,从主要呈现给渲染器

时间:2018-01-16 15:04:08

标签: javascript node.js electron

所以我知道这是有效的,因为我试过了,但它没有在任何地方记录,所以我问是否可以使用这种做法,而不用担心它将来会停止工作(电子和nodejs已知会打破从一个版本到另一个版本的东西)

这就是我所说的练习类型:

main.js

app.emit('did-something', param1, param2);

renderer.js(浏览器窗口)

const {app} = require('electron').remote;

app.on('did-something', (param1, param2) => {
  $('#whatever').text(param1);
});

基本上我试图将所有不直接处理HTML的代码(如数据库交互)移动到main.js中,我想确保这是正确的方法。

另外,如果我使用自己的方法和属性扩展app对象,这样可以吗?

1 个答案:

答案 0 :(得分:5)

主要流程几乎总是只用于创建BrowserWindows和访问电子API,这些API在文档中标记为只能通过主流程访问。

查看this article以了解主/渲染器与其用途之间差异的更多详细信息。 Chromium流程架构意味着主流程中的任何阻塞代码也会阻止渲染器。

您的所有应用代码都应该在渲染过程中,如果您正在执行长时间运行的过程,那么应该将这些过程强加到Web Workers或其他渲染器进程中。 electron-remote可以帮助您做到这一点。

如果您想在主要和渲染器流程之间进行通信,则应使用documented API's