2014-09-26 17 views
6

Bir formdan webworker'a bir dosya aktarmak istiyorum.Dosyayı web sunucusuna aktar: DataCloneError: Nesne klonlamadı

worker.postMessage(files: array_files); 

Ama Firefox ile bu hatası alıyorum: krom i basit bir Dosya Listesi-Nesnesi aktarmak için bu kodu kullanabilirsiniz

Transfer file to webworker: DataCloneError: The object could not be cloned. 

Yani ben transfer nesneler için sözdizimi kullanmaya çalıştı. Böyle bir şey mi?

var post = {files: array_files, file_ids: response.file_ids}; 
worker.postMessage(post, [post]); 

Ama bununla ben

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': Value at index 0 does not have a transferable type. 

Ve Firefox'ta hala

DataCloneError: The object could not be cloned. 

Chrome

bu olsun.

İşçiye bir işçiye iletmenin doğru yolu nedir?

+0

Mozilla hatası var https://bugzilla.mozilla.org/show_bug.cgi?id=823484, bu yüzden birisi tamir edemeyecekse şansın yok. Aslında düzeltmeye istekliyim, ancak Firefox'un yapımını rahat hissetmiyorum, bu yüzden birisi beni dondurabilirse, o zaman – Singagirl

+0

koduna dikkat edebilirdim, aynı sorun vardı, "Nesne klonlamadı." çünkü sadece mesajımdaki paramın yerini alıyordum. Daha fazla kod sağlayabilir misiniz? – romuleald

cevap

4

Dosya nesnelerini postMessage ile nasıl geçeceğimi bilmiyorum, ancak en azından aktarılabilir nesnelerin bu şekilde çalışmadığını bildirebilirim. İsteğe bağlı ikinci parametre, geçmek istediğiniz yazılan dizilerin artalan ArrayBuffer örneklerinin bir dizisidir. Yani örneğin, göndermek istediğiniz mesajı varsayalım yapılandırılmış nesnedir:

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

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

Ayrıca transfer nesne olarak başka bir işçi/pencereye Türlenmiş dizi geçirerek gönderme işçinin gelen erişilmez transfer diziyi yapar fark/penceresi.

İlgili konular