11

フォームから Webworker にファイルを転送したい。クロムでは、このコードを使用して FileList-Object を簡単に転送できます。

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 をワーカーに渡す正しい方法は何ですか?

4

1 に答える 1

7

postMessage で File オブジェクトを渡す方法はわかりませんが、少なくとも、転送可能なオブジェクトはこの方法では機能しないことをアドバイスできます。オプションの 2 番目のパラメーターは、渡したい型付き配列のバッキング ArrayBuffer インスタンスの配列です。たとえば、投稿したいメッセージが構造化されたオブジェクトであるとします。

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

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

また、型指定された配列を転送可能なオブジェクトとして別のワーカー/ウィンドウに渡すと、転送された配列が送信元のワーカー/ウィンドウからアクセスできなくなることにも注意してください。

于 2014-11-08T10:51:21.380 に答える