2016-02-27 24 views
0

我有一個電子應用程序,渲染器進程利用webworker進行一些計算。在webworker中使用ipcRenderer?

它工作正常,但現在我想從主進程中直接發送消息到webworker。

我試圖這樣做的electron對象附加到全球的一個在我index.html

<script> 
    const electron = require('electron'); 
</script> 

然後,我想我可以把它像這樣在我webworker:

const ipcRenderer = self.electron.ipcRenderer

但這不工作,任何想法?

問候

回答

1

我們在農閒討論這一點,但爲後人:

工人使用無共享模型,所以你不能在你的頁面中定義一個變量(甚至全球或連接到window)並期望它出現在工人內部。您只能通過postMessage發送項目(或者以其他方式從Worker中獲取它們,例如Ajax請求)。但是,通過postMessage發送的數據必須能夠被克隆。從Worker.postMessage()

這可以是由結構化的克隆算法,其包括循環引用

和從The structured clone algorithm處理的任何值或JavaScript對象:

屬性描述符,setter以及getter(以及類似的元數據類功能)不會重複。例如,如果使用屬性描述符將對象標記爲只讀,則它將以重複方式讀寫,因爲這是默認條件。 原型鏈不會被散步和重複。

因此沒有辦法將electron對象「發送」到Worker中;一種解決方案是要求使用Electron的節點集成,但由於#797中陳述的原因而不支持。支持你想要做的一種可能的方式是將消息從主進程發送到渲染進程,然後將其轉發給Worker

+0

非常詳細的答案,謝謝! –