2012-12-26 13 views
5

Senkron JS FileSystem API'sini kullanmak istiyorum, bu nedenle bu kodun webworker'a verilmesi gerekir. web sunucusu için gelen veriler, klasörleri yüklemek için yeni bir özellik olan kromları kullanabilmek için bir dragndrop olayından (dataTransfer.items) alınır. ne yazık ki, her deneme krom tarafından "Hatalı Hata: DATA_CLONE_ERR: DOM Özel Durum 25" ile iptal edildi.JS: DataTransferItemList'i WebWorker'a aktar

temelde, onun böyle:

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

bu işe yaramaz. herhangi bir fikir, neden? benzer (ama% 100 aynı değil) bir örnek burada bulunabilir: http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ - Bu işe yarıyor. onun bir DataTransferItemList değil, bir FileList var - bu tür bir liste serileştirilemez mi?

sayesinde Christoph

+0

Bkz http://stackoverflow.com/questions/7506635/uncaught-error-data-clone-err-dom-exception-25-thrown-by-web: o zaman işçiye doğrudan bu gönderebilir İşçi – pd40

+0

Bu ilginç bir soru. Ancak başlangıç ​​için nesneyi farklı değişkenlere atayarak kopyalamazsınız. Bu kural çöp toplayıcısını kullanan tüm diller için geçerlidir. Ve sadece bir dize veya bayt dizisini web çalışanına gönderebilirsiniz - ama umarım gelecekte bir çözüm olacaktır. –

+0

olası kopyası [Eşzamanlı dosya sistemi api bir krom uzantısında kullanılabilir mi] (http://stackoverflow.com/questions/10493337/can-the-synchronous-file-system-api-be-used-in-a -Krom yayılma) –

cevap

0

Sen FileList almak için event.dataTransfer.files kullanmalıdır.

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