我有一个电子应用程序,渲染器过程利用Webworker进行一些计算。
一切正常,但是现在我想将主流程中的消息直接发送到Webworker。
我尝试通过以下方式将electron
对象附加到全局对象中index.html
:
<script>
const electron = require('electron');
</script>
然后我想我可以在我的网络工作人员中得到它:
const ipcRenderer = self.electron.ipcRenderer
但这是行不通的,知道吗?
问候
我们在Slack中讨论了这一点,但出于后人的考虑:
Worker使用无共享模型,因此您无法在页面中定义变量(即使是全局变量或附加到window
),也无法期望其显示在Worker中。您只能发送项目postMessage
(或以其他方式(例如Ajax请求)从Worker中获取项目)。但是,发送过来的数据postMessage
必须能够被克隆。从Worker.postMessage():
这可以是结构化克隆算法处理的任何值或JavaScript对象,包括循环引用
并从结构化克隆算法中得出:
属性描述符,setter和getter(以及类似元数据的功能)不会重复。例如,如果使用属性描述符将对象标记为只读,则该对象将在重复对象中被读写,因为这是默认条件。原型链不会被复制。
因此,无法将electron
对象“发送”到Worker中。一种解决方案是使用Electron的节点集成来要求它,但由于#797中所述的原因而不受支持。支持您想要做的事情的一种潜在方法是将消息从主流程发送到渲染流程,然后将其转发给Worker
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句