2012-12-26 17 views
5

Desidero utilizzare l'API JS FileSystem sincrono, pertanto, questo codice deve essere assegnato a un webworker. i dati in arrivo per il webworker sono tratti da un evento dragndrop (dataTransfer.items) per poter utilizzare le nuove funzionalità cromatiche per caricare le cartelle. purtroppo, ogni tentativo viene annullato da Chrome con un "Errore non rilevato: DATA_CLONE_ERR: DOM Exception 25".JS: Trasferire DataTransferItemList su WebWorker

fondamentalmente, è come questo:

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

questo non funziona. qualche idea, perché? un esempio simile (ma non al 100% identico) può essere trovato qui: http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ - questo sembra funzionare. non è un DataTransferItemList, è un FileList lì - questo tipo di lista non può essere serializzato?

Grazie, Christoph

+0

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

+0

Questa è una domanda interessante. Ma per iniziare, non copiare l'oggetto assegnandolo a una variabile diversa. Questa regola si applica a tutte le lingue che utilizzano Garbage Collector. E puoi solo inviare una stringa o un array di byte al web worker, ma spero che ci sarà una soluzione in futuro. –

+0

possibile duplicato di [È possibile utilizzare il file system sincrono api in un'estensione chrome] (http://stackoverflow.com/questions/10493337/can-the-synchronous-file-system-api-be-used-in-a -chrome-estensione) –

risposta

0

Si dovrebbe usare event.dataTransfer.files per ottenere il FileList. allora si può inviare che direttamente al lavoratore:

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