2014-09-26 11 views
6

Ich möchte eine Datei von einem Formular an einen Webworker übertragen. In Chrom kann ich einfach diesen Code verwenden, um ein Dateiliste-Objekt zu übertragen:Datei zu Webworker übertragen: DataCloneError: Das Objekt konnte nicht geklont werden

worker.postMessage(files: array_files); 

Aber mit Firefox bekomme ich diesen Fehler:

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

Also habe ich versucht, die Syntax für übertragbar Objekte zu verwenden. Etwas wie das?

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

Aber mit, dass ich dieses in Chrome

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

Und noch

DataCloneError: The object could not be cloned. 

in Firefox.

Was ist der richtige Weg, um eine FileList an einen Arbeiter zu übergeben?

+0

Es gibt Mozilla Bug https://bugzilla.mozilla.org/show_bug.cgi?id=823484, so dass Sie kein Glück haben, es sei denn jemand wird es reparieren. Eigentlich bin ich bereit zu reparieren, aber ich bin nicht zufrieden damit, Firefox zu bauen, also wenn jemand sie von mir machen könnte, dann könnte ich mich um Code kümmern – Singagirl

+0

Ich hatte das gleiche Problem, 'Das Objekt konnte nicht geklont werden weil ich mich nur auf den Param in meiner Nachricht bezog. Können Sie mehr Code bereitstellen? – romuleald

Antwort

4

Ich weiß nicht, wie Sie Dateiobjekte mit postMessage übergeben, aber zumindest kann ich darauf hinweisen, dass übertragbare Objekte auf diese Weise nicht funktionieren. Der optionale zweite Parameter ist ein Array der ArrayBuffer-Instanzen, die von allen typisierten Arrays unterstützt werden, die Sie übergeben möchten. So zum Beispiel der Nachricht annehmen würdest dir veröffentlichen ist ein strukturiertes Objekt:

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

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

Beachten Sie auch, dass als übertragbar Objekt in einem anderen Arbeiter/Fenster ein typisierten Array übergibt die übertragene Array von dem Sende Arbeiter unzugänglich macht/Fenster.