在内部,Firefox将JSON编码通过postMessage传递给Web Worker的对象。但是,这仅适用于Firefox(3.6+)的Trunk版本,而不适用于Firefox 3.5,因此问题实际上是如何向当前平台添加此操作的后向支持。之前已经建议使用window.atob()和window.btoa()方法,但是这些方法在线程内部不可用,因为它们无法访问DOM。

Mozilla在他们的开发者维基上公开表示这一点,但社区中的许多人都注意到这种情况发生了。查看ejohn的博客测试: 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