从 Electron 子进程访问 DOM 树
Accessing the DOM tree from an Electron child process
我在 Windows 10 上使用 Electron (v1.2.2),我的一个项目有一个大问题:
我有一个脚本,可以转入渲染器进程并创建子进程以 运行 一些特殊代码。我需要子进程中的代码 运行ned 来访问 DOM。
创建进程时(使用 child_process.fork()),我使用内置 IPC 通道发送一些信息,例如时间戳,一些关于脚本的信息,这些信息将在子进程中 运行...
但是当我尝试发送一个 class 的实例时,它根本不起作用:
//main.js
const child_process = require('child_process');
const child = child_process.fork('child.js');
child.send({ready: { version: '0.0.1', dom: document }});
// child.js
process.on('message', (m) => {
typeof m.dom.body.appendChild; // ReferenceError
});
我想这是 IPC 通信的限制,它只能传输一些特定的数据,但我知道可以使用 IPC 通道发送服务器或套接字实例,所以我不明白为什么这不可能传送文件。
所以我一直在寻找一种从子进程访问 DOM 的方法,但我没有找到任何解决方案。
子进程内部的代码需要对DOM进行大量操作,不能使用IPC通信访问,否则性能会很慢。
所以,我的问题是:有什么方法可以从子进程访问 DOM 吗?
在 Electron 问题页面讨论后,看来这个问题无法解决;无法将 DOM 访问到子进程中,因为 Electron(如 nw.js)并非为此而设计。
更多信息:https://github.com/electron/electron/issues/7057
编辑: 最后我找到了另一种方法来解决我的问题,方法是使用允许 运行 一个 HTML 页面的 webview
标签具有 Node.js 功能,并且始终采用新流程。更多信息 here
我在 Windows 10 上使用 Electron (v1.2.2),我的一个项目有一个大问题:
我有一个脚本,可以转入渲染器进程并创建子进程以 运行 一些特殊代码。我需要子进程中的代码 运行ned 来访问 DOM。 创建进程时(使用 child_process.fork()),我使用内置 IPC 通道发送一些信息,例如时间戳,一些关于脚本的信息,这些信息将在子进程中 运行...
但是当我尝试发送一个 class 的实例时,它根本不起作用:
//main.js
const child_process = require('child_process');
const child = child_process.fork('child.js');
child.send({ready: { version: '0.0.1', dom: document }});
// child.js
process.on('message', (m) => {
typeof m.dom.body.appendChild; // ReferenceError
});
我想这是 IPC 通信的限制,它只能传输一些特定的数据,但我知道可以使用 IPC 通道发送服务器或套接字实例,所以我不明白为什么这不可能传送文件。
所以我一直在寻找一种从子进程访问 DOM 的方法,但我没有找到任何解决方案。 子进程内部的代码需要对DOM进行大量操作,不能使用IPC通信访问,否则性能会很慢。
所以,我的问题是:有什么方法可以从子进程访问 DOM 吗?
在 Electron 问题页面讨论后,看来这个问题无法解决;无法将 DOM 访问到子进程中,因为 Electron(如 nw.js)并非为此而设计。
更多信息:https://github.com/electron/electron/issues/7057
编辑: 最后我找到了另一种方法来解决我的问题,方法是使用允许 运行 一个 HTML 页面的 webview
标签具有 Node.js 功能,并且始终采用新流程。更多信息 here