Domanda

Internamente, Firefox codificherà JSON un oggetto passato tramite postMessage da e verso il Web Worker. Tuttavia, questo funziona solo con build Trunk di Firefox (3.6+) e non con Firefox 3.5, quindi la domanda è come aggiungere il supporto all'indietro di questa operazione alla piattaforma attuale. I metodi window.atob () e window.btoa () erano stati suggeriti in precedenza, ma purtroppo questi non sono disponibili internamente ai thread perché non hanno accesso al DOM.

Mozilla lo afferma pubblicamente sul wiki dello sviluppatore, ma è stato notato da molti nella community che ciò accade. Controlla il test del blog di ejohn: http://ejohn.org/files/bugs/postMessage/

Ho verificato che anche questo è il caso, in 3.5 passa solo stringhe e in 3.6 passa l'oggetto.

È stato utile?

Soluzione

Non ho notato che la codifica JSON automatica non funziona in Firefox 3.5, ma ho principalmente lavorato con Gears, che comunque non lo supporta.

Prova a includere una utility JSON in entrambi i lavoratori script e lo script padre, quindi codificalo e decodificalo manualmente da solo. Questo funziona abbastanza bene per me con Gears.

Questo approccio non dovrebbe interrompersi quando Firefox inizia a eseguire automaticamente la codifica JSON per te, poiché la stringa JSON codificata rimarrà una stringa.

Altri suggerimenti

In JavaScript ci sono due funzioni rispettivamente per la decodifica e la codifica delle stringhe base64:

atob () btoa ()

Ho trovato la soluzione al mio problema!

Sembra che se la variabile thread, anche se dichiarata globalmente, perde la sua proprietà .onmessage se quella proprietà è stata dichiarata all'interno di un'altra funzione. Se la proprietà viene istanziata nell'ambito globale, i messaggi JSON vengono analizzati correttamente.

Non sono ancora sicuro di capire cosa sta succedendo qui, ma almeno ho trovato un modo per far passare gli oggetti senza dover fare affidamento su librerie di stingify / json aggiuntive.

Se qualcuno potesse spiegarmelo in modo che io abbia una migliore comprensione, sarebbe apprezzato :)

Ho impostato un caso di test qui: http://x.miernicki.com/ che registra il messaggi inter-thread alla console firebug se qualcuno se ne frega. Questo mi ha aiutato a far passare oggetti in Fox3.5 e alla fine mi ha permesso di vedere quale fosse il problema.

Dato che stai chiaramente cercando una soluzione solo per FF, hai provato yourObject.toSource () ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top