Question

En interne, Firefox encodera en JSON un objet transmis via postMessage vers et depuis Web Worker. Toutefois, cela ne fonctionne que dans les versions Trunk de Firefox (3.6+) et non dans Firefox 3.5. La question est donc de savoir comment ajouter un support rétroactif de cette opération à la plate-forme actuelle. Les méthodes window.atob () et window.btoa () ont déjà été suggérées, mais malheureusement elles ne sont pas disponibles en interne pour les threads car ils n’ont pas accès au DOM.

Mozilla le déclare publiquement sur son wiki de développeur, mais de nombreux membres de la communauté ont remarqué que cela se produit. Consultez le test du blog d'ejohn: http://ejohn.org/files/bugs/postMessage/ .

J'ai vérifié que c'était également le cas. Dans la version 3.5, il ne transmet que des chaînes, et dans la version 3.6, l'objet passera.

Était-ce utile?

La solution

Je n'ai pas remarqué que l'encodage JSON automatique ne fonctionnait pas dans Firefox 3.5, mais je travaillais principalement avec Gears, qui ne le prend pas en charge de toute façon.

Essayez d'inclure un utilitaire JSON dans le serveur. script et le script parent, puis manuellement coder et décoder vous-même. Cela fonctionne assez bien pour moi avec Gears.

Cette approche ne devrait pas être interrompue lorsque Firefox commencera automatiquement à coder JSON pour vous, car la chaîne JSON codée restera une chaîne.

Autres conseils

En JavaScript, deux fonctions permettent respectivement de décoder et d’encoder les chaînes base64:

atob () btoa ()

J'ai trouvé la solution à mon propre problème!

Il semble que si la variable de thread, même déclarée globalement, perd sa propriété .onmessage si cette propriété a été déclarée dans une autre fonction. Si la propriété est instanciée sur l'étendue globale, les messages JSON sont analysés correctement.

Je ne suis toujours pas sûr de comprendre ce qui se passe ici, mais au moins, j'ai trouvé un moyen de faire passer des objets sans avoir à compter sur des bibliothèques supplémentaires stingify / json.

Si quelqu'un pouvait m'expliquer cela afin que je comprenne mieux, ce serait apprécié:)

J'ai configuré un scénario de test ici: http://x.miernicki.com/ , qui enregistre le inter-thread messages à la console firebug si quelqu'un s'en soucie. Cela m'a aidé à faire circuler des objets dans Fox3.5 et m'a finalement permis de voir quel était le problème.

Puisque vous recherchez clairement une solution exclusivement FF, avez-vous essayé yourObject.toSource () ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top