发布到Web worker时firefox中的DataCloneError

时间:2013-10-29 15:02:25

标签: javascript firefox web-worker

我正在开发一个名为Ozai的帮助程序库,以使Web工作者更容易,但我遇到了firefox中的问题。我从URL Blob创建一个Web worker并尝试将此有效负载发布到它:

msg = {
    "id":"0fae0ff8-bfd1-49ea-8139-3d03fb9584e4",
    "fn":"fn",
    "args":[100,200]
}

使用此代码:

worker.postMessage(msg)

会引发DataCloneError例外。看起来Firefox的结构化克隆实现在一个非常简单的对象上失败了。代码在Chrome和Safari上运行没有问题,但在最新版本的Firefox中失败。我在这里错过了什么吗?我如何解决这个问题(最好不要对有效载荷进行字符串化)?

这是一个小提琴: http://jsfiddle.net/V8aCy/6/

和Firelord Ozai的照片:

enter image description here

1 个答案:

答案 0 :(得分:4)

您尝试使用具有引用postMessage属性的对象调用arguments。这不起作用,因为data has to be transferable,这意味着完全是JSON可序列化的或实现Transferable(例如ArrayBuffer),arguments不是。{/ p>

使用Array.prototype.slice.call(arguments, 0)arguments转换为数组,如果内容正常,可以对其进行序列化(克隆)。

Corrected fiddle