Как вы кодируете объект в Web Worker для его передачи через postMessage? - PullRequest
0 голосов
/ 10 сентября 2009

Внутренне, Firefox будет JSON кодировать объект, переданный через postMessage в и из Web Worker. Однако это работает только в сборках Trunk Firefox (3.6+), но не в Firefox 3.5, поэтому вопрос заключается в том, как добавить обратную поддержку этой операции к текущей платформе. Методы window.atob () и window.btoa () были предложены ранее, но, увы, они недоступны внутренним потокам, поскольку не имеют доступа к DOM.

Mozilla публично заявляет об этом в своей вики-разработке, но многие в сообществе заметили, что это происходит. Проверьте тест блога ejohn: http://ejohn.org/files/bugs/postMessage/

Я подтвердил, что это также верно, в 3.5 он пропускает только строки, а в 3.6 он пропускает объект.

Ответы [ 4 ]

2 голосов
/ 10 сентября 2009

Я не заметил, что автоматическое JSON-кодирование не работает в Firefox 3.5, но я в основном работал с Gears, который все равно его не поддерживает.

Попробуйте включить утилиту JSON в рабочий и родительский сценарии, а затем вручную закодируйте и декодируйте ее самостоятельно. Это хорошо работает для меня с Gears.

Этот подход не должен нарушаться, когда Firefox начинает автоматически выполнять кодировку JSON для вас, поскольку закодированная строка JSON останется строкой.

1 голос
/ 28 марта 2016

В JavaScript есть две функции соответственно для декодирования и кодирования строк base64:

atob () btoa ()

0 голосов
/ 10 сентября 2009

Я нашел решение своей проблемы!

Кажется, что если переменная потока, даже если она объявлена ​​глобально, теряет свое свойство .onmessage, если это свойство было объявлено внутри другой функции. Если свойство создается в глобальной области видимости, то сообщения JSON анализируются правильно.

Я все еще не уверен, что понимаю, что здесь происходит, но, по крайней мере, я нашел способ передавать объекты, не полагаясь на какие-либо дополнительные библиотеки stingify / json.

Если бы кто-нибудь мог мне это объяснить, чтобы я лучше понимал, это было бы оценено :) 1007 *

Я установил тестовый пример здесь: http://x.miernicki.com/, который записывает сообщения между потоками на консоль firebug, если кому-то все равно. Это помогло мне передать объекты в Fox3.5 и в конечном итоге позволило мне увидеть, в чем проблема.

0 голосов
/ 10 сентября 2009

Поскольку вы явно ищете решение только для FF, вы пробовали yourObject.toSource()?

...