我有一个电子应用程序,其中渲染器进程利用webworker进行一些计算。
它运行正常,但现在我想将主进程的消息直接发送给webworker。
我试图通过这样做将electron
对象附加到index.html
中的全局对象:
<script>
const electron = require('electron');
</script>
然后我想我可以在我的网络工作者中得到它:
const ipcRenderer = self.electron.ipcRenderer
但这不起作用,任何想法?
此致
答案 0 :(得分:1)
我们在Slack中讨论过这个问题,但是对后人来说:
工作人员使用无共享模型,因此您无法在页面中定义变量(甚至是全局变量或附加到window
)并期望它显示在Worker中。您只能通过postMessage
发送项目(或以其他方式从Worker获取它们,例如Ajax请求)。但是,必须能够克隆通过postMessage
发送的数据。来自Worker.postMessage():
这可以是结构化克隆算法处理的任何值或JavaScript对象,其中包括循环引用
和The structured clone algorithm:
属性描述符,设置器和getter(以及类似的类似元数据的功能)不会重复。例如,如果使用属性描述符将对象标记为只读,则它将以重复方式进行读写,因为这是默认条件。 原型链不会走路和重复。
因此无法将electron
对象“发送”到Worker中;一种解决方案是使用Electron的节点集成来要求它,但由于#797中所述的原因而不支持。支持您想要做的事情的一种可能方式是将消息从主进程发送到呈现进程,然后将其转发给Worker