Electron - 如何使用主进程和渲染进程

hal*_*ier 6 javascript renderer node.js electron

在这一点上,经过大量研究和谷歌搜索,我了解了主要和渲染器的作用,以及它们在 Electron 应用程序中的重要性。

但是,在这里我发出请求,希望得到所有知识渊博的人的回答:请我能清楚地说明如何在我的应用程序中实现这一点吗?

我有一个 main.js、index.html 和 style.css,我正在尝试从 html 文件中触发一个 javascript 函数。@Manprit Singh Sahota 有同样的问题,Electron js 中的按钮单击事件绑定,并解决了它(幸运的是他),但只是说明他正在 renderer.js 中设置他的函数,而没有解释在哪里、什么和如何。@NealR也有类似的问题,但也没有解释他如何关联他的 renderer.js。

请有人揭开这个神秘文件保存在哪里的秘密,以及我如何在我的程序中引用它?

不要建议电子文档,我已经通过它,它似乎需要一些严重的改进......

主文件

const electron = require('electron');
const { app, BrowserWindow } = require('electron');

//stuff creating window...

function applyFormattingRules() {
  console.log('called!');
};

//more stuff opening and closing window...
Run Code Online (Sandbox Code Playgroud)

索引.html

<head>
    //...
    <script src="main.js"></script>
</head>

<body>
    //...
    <button type="button" class="btn btn-secondary" name="applyRules"
    onclick="applyFormattingRules()">Apply formatting</button>
</body>
Run Code Online (Sandbox Code Playgroud)

我的窗口工作正常,没有错误。但是当我单击按钮时,什么也没有发生,也没有任何日志记录到控制台。也许我在代码中做错了什么,但我所有的研究似乎都指向 Electron 主进程和渲染器进程。

任何建议非常感谢。

jer*_*rch 5

使用电子,您必须注意您的 JS 文件在哪种上下文中运行:

  • process / nodejs 上下文
    通常main.js在这里运行,它完成电子环境和浏览器/电子窗口的所有引导。在某些时候,您将告诉一个窗口加载一些 HTML 文件 - 这将进入第二个上下文。
  • 电子窗口/浏览器上下文
    任何加载到窗口中的东西,都会“远程”运行。要在浏览器上下文中执行 JS 文件,您几乎可以像处理任何其他 Web 应用程序一样(使用<script>标签等)。

到目前为止,电子应用程序与任何其他 Web 应用程序没有什么不同——进程/nodejs 部分充当服务器组件,而窗口上下文是网页/客户端上下文。请注意,这些上下文只是松散耦合,您需要 IPC 机制在它们之间交换数据。

仍然电子更进一步 - 它允许直接将 nodejs 模块嵌入到窗口上下文中。由于电子团队对底层 chrome 库进行了一些扩展,这是可能的。谨慎使用它,因为它可能会引入安全问题(甚至有一个安全设置)。

得到你想要的:

  • 在其中创建一个窗口 main.js
  • 将一些 HTML 文档加载到该窗口中
  • 引用该 HTML 文档中的其他一些 JS 文件,该文件现在与 HTML 文档一起加载(这是render.js您参考中的不祥之兆)
  • 将一些逻辑放在其他 JS 文件中 --> 在窗口上下文中执行

有一个很好的演练可以在电子文档 ( https://electronjs.org/docs/tutorial/first-app ) 中启动和运行一个基本示例。