0

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

Mozilla 在其开发者 wiki 上公开声明了这一点,但社区中的许多人已经注意到这种情况发生了。查看 ejohn 的博客测试:http ://ejohn.org/files/bugs/postMessage/

我已经验证了这种情况也是如此,在 3.5 中,它只传递字符串,而在 3.6 中将传递对象。

4

4 回答 4

2

我没有注意到自动 JSON 编码在 Firefox 3.5 中不起作用,但我主要使用的是 Gears,无论如何它都不支持它。

尝试在工作脚本和父脚本中都包含JSON 实用程序,然后自己手动对其进行编码和解码。这对我来说非常适合使用 Gears。

当 Firefox 开始自动为您进行 JSON 编码时,这种方法不应该中断,因为编码的 JSON 字符串仍将是一个字符串。

于 2009-09-09T21:48:16.243 回答
1

在 JavaScript 中有两个函数分别用于解码和编码 base64 字符串:

atob() btoa()

于 2016-03-28T18:09:44.790 回答
0

既然您显然在寻找仅限 FF 的解决方案,您是否尝试过yourObject.toSource()

于 2009-09-09T22:08:25.483 回答
0

我找到了解决我自己问题的方法!

似乎如果线程变量,即使是全局声明的,如果该属性是在另一个函数中声明的,也会失去其 .onmessage 属性。如果该属性在全局范围内实例化,则 JSON 消息将被正确解析。

我仍然不确定我是否理解这里发生了什么,但至少我已经找到了一种无需依赖任何额外的 stingify/json 库即可传递对象的方法。

如果有人可以向我解释这一点,以便我有更好的理解,将不胜感激:)

我在这里设置了一个测试用例:http: //x.miernicki.com/如果有人关心,它将线程间消息记录到 firebug 控制台。这帮助我在 Fox3.5 中传递对象并最终让我看到问题所在。

于 2009-09-10T16:39:00.997 回答