2012-12-26 14 views
5

Chcę używać synchronicznego JS FileSystem API, dlatego ten kod musi zostać umieszczony w webworker. przychodzące dane dla webworkera są pobierane z zdarzenia przeciągania (dataTransfer.items) w celu umożliwienia przesyłu folderów z najnowszymi możliwościami chromowania. Niestety, każda próba jest anulowana przez chrome z "Uncaught Error: DATA_CLONE_ERR: DOM Exception 25".JS: Przenieś DataTransferItemList do WebWorker

zasadzie jej tak:

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

to nie działa. jakikolwiek pomysł, dlaczego? podobny (ale nie w 100% identyczny) przykład można znaleźć tutaj: http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ - to wydaje się działać. nie jest to DataTransferItemList, jest tam FileList - czy ten typ Listy nie może być serializowany?

Dzięki Christoph

+0

Zobacz http://stackoverflow.com/questions/7506635/uncaught-error-data-clone-err-dom-exception-25-thrown-by-web -pracownik – pd40

+0

To interesujące pytanie. Ale na początek nie kopiujesz obiektu, przypisując go do innej zmiennej. Ta reguła dotyczy wszystkich języków korzystających z funkcji czyszczenia pamięci. I możesz wysłać tylko ciąg znaków lub tablicę bajtów do pracownika sieci - ale mam nadzieję, że w przyszłości pojawi się rozwiązanie. –

+0

możliwy duplikat [Czy api systemu synchronicznego może być używany w rozszerzeniu chrome] (http://stackoverflow.com/questions/10493337/can-the-synchronous-file-system-api-be-used-in-a -chrome-extension) –

Odpowiedz

0

Należy użyć event.dataTransfer.files uzyskać FileList. Następnie można dodawać bezpośrednio do pracownika:

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