Failed to execute 'postMessage' on 'Worker': could not be cloned.


let worker = new Worker('./datapoint.js');
let message = {deviceCodes:deviceCodes,dataModel:dataModel};
worker.postMessage(message);

報錯內容:

Uncaught DOMException: Failed to execute 'postMessage' on 'Worker': function(c){var W=this;if(c.kind===cf){var N=c.data;W.co(N)&&(W._73O.remove(N),delete W._map[N._id],W._75I(cf,n...<omitted>...)} could not be cloned.

問題所在:

postMessage中傳入了不可clone的參數。比如一些HTML element。因為這些元素即使傳過去了(cloned),也無法操作啊!

 

知識衍生

Web Worker 有以下幾個使用注意點。
(1)同源限制
分配給 Worker 線程運行的腳本文件,必須與主線程的腳本文件同源。
(2)DOM 限制
Worker 線程所在的全局對象,與主線程不一樣,無法讀取主線程所在網頁的 DOM 對象,也無法使用document、window、parent這些對象。但是,Worker 線程可以navigator對象和location對象。
(3)通信聯系
Worker 線程和主線程不在同一個上下文環境,它們不能直接通信,必須通過消息完成。
(4)腳本限制
Worker 線程不能執行alert()方法和confirm()方法,但可以使用 XMLHttpRequest 對象發出 AJAX 請求。
(5)文件限制
Worker 線程無法讀取本地文件,即不能打開本機的文件系統(file://),它所加載的腳本,必須來自網絡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM