2012-12-26 23 views
5

私は同期するJS FileSystem APIを使いたいので、このコードをWebワーカーに渡す必要があります。 Webworkerの入力データは、フォルダをアップロードするために最新の機能を使用できるように、dragndropイベント(dataTransfer.items)から取得されます。 悲しいことに、すべての試行は "キャッチされていないエラー:DATA_CLONE_ERR:DOM Exception 25"のクロムによってキャンセルされます。JS:DataTransferItemListをWebWorkerに転送

基本的には、その次のように:

var files=e.dataTransfer.items; [copying the DataTransferItemList] 
    var worker=new Worker(...) 
    worker.postMessage(files); 

、これは動作しません。任意のアイデア、なぜですか? 同様の(ただし100%同一ではない)例がここにあります:http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ - これはうまくいくようです。それはDataTransferItemListではなく、このタイプのListが直列化されないFileListですか?

おかげで、 クリストフ

+0

はhttp://stackoverflow.com/questions/7506635/uncaught-error-data-clone-err-dom-exception-25-thrown-by-webを参照してください。 -worker – pd40

+0

これは興味深い質問です。しかし、初心者の場合は、オブジェクトを別の変数に代入してコピーしません。このルールは、ガベージコレクタを使用するすべての言語に適用されます。そして、あなたは文字列またはバイト配列をWebワーカーに投稿することしかできませんが、将来は解決策があることを願っています。 –

+0

[クロム拡張で同期ファイルシステムapiを使用できるかどうか]の複製が可能です。(http://stackoverflow.com/questions/10493337/can-the-synchronous-file-system-api-be-used-in-a -chrome-extension) –

答えて

0

あなたはFileListを取得するためにevent.dataTransfer.filesを使用する必要があります。あなたは労働者に直接そのを投稿することができます:

var files=e.dataTransfer.files || e.target.files; // Cross browser FileList 
var worker=new Worker(...); 
worker.postMessage({files: files});