从Electron子进程访问DOM树

Accessing the DOM tree from an Electron child process

本文关键字:DOM 访问 子进程 Electron      更新时间:2023-09-26

我在Windows 10上使用Electron (v1.2.2),我的一个项目有一个大问题:

我有一个脚本转换成渲染器进程,并创建子进程运行一些特殊的代码。我需要在子进程内部运行的代码来访问DOM。当进程被创建(使用child_process.fork())时,我使用内置的IPC通道发送一些信息,例如时间戳,一些关于脚本的信息,这些信息将在子进程中运行…

但是当我尝试发送一个类的实例时,它根本不起作用:

//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 ?

进入电子问题页面讨论后,似乎这个问题是无法解决的;没有办法在子进程中访问DOM,因为Electron(像nw.js)不是为此而设计的。

更多信息请访问:https://github.com/electron/electron/issues/7057

EDIT:最后,我找到了另一种方法来解决我的问题,使用webview标签,允许运行一个具有Node.js功能的HTML页面,并总是进入一个新的进程。更多信息在这里