从Electron子进程访问DOM树

时间:2016-09-01 11:13:57

标签: javascript node.js dom ipc electron

我在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?

1 个答案:

答案 0 :(得分:2)

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

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

编辑:最后,我找到了另一种方法来解决我的问题,使用webview标记,该标记允许运行带有Node.js功能的HTML页面并始终进入新进程。更多信息here