Как закодировать объект в веб-воркере, чтобы его можно было передать через postMessage?

StackOverflow https://stackoverflow.com/questions/1402209

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

atob () btoa ()

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top