2014-09-26 68 views
6

我想將文件從表單傳輸到webworker。在鉻我簡單的可以使用此代碼來傳輸文件清單,對象:將文件傳輸到webworker:DataCloneError:無法克隆對象

worker.postMessage(files: array_files); 

但隨着Firefox的我得到這個錯誤:

Transfer file to webworker: DataCloneError: The object could not be cloned. 

所以我試圖用語法轉讓對象。像這樣?

var post = {files: array_files, file_ids: response.file_ids}; 
worker.postMessage(post, [post]); 

但與我得到這個在Chrome

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': Value at index 0 does not have a transferable type. 

而且還

DataCloneError: The object could not be cloned. 
在Firefox

將FileList傳遞給工作人員的正確方法是什麼?

+0

有Mozilla的bug https://bugzilla.mozilla.org/show_bug.cgi?id=823484,所以你運氣不好,除非有人會修復它。其實我願意修復,但是我不習慣製作Firefox,所以如果有人能夠讓我回來,那麼我可以照顧代碼 – Singagirl 2015-03-10 04:02:55

+0

我有同樣的問題,「對象不能被克隆。」那是因爲我只是在我的信息中引用參數。你能提供更多的代碼嗎? – romuleald 2015-06-23 09:02:21

回答

4

我不知道如何通過postMessage傳遞File對象,但至少我可以建議可傳遞對象不以這種方式工作。可選的第二個參數是您希望傳遞的任何類型數組的後端ArrayBuffer實例的數組。因此,舉例來說,假設你想發佈的消息是結構化對象:

var message = {foo: 'abc', bar: new Uint8Array(...)}; 

worker.postMessage(message, [message.bar.buffer]) 

還要注意的是傳遞一個類型數組另一工作人員/窗口作爲轉讓對象進行轉移陣列從發送工人難以接近/窗口。