我正在开发一个名为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的照片:
答案 0 :(得分:4)
您尝试使用具有引用postMessage
属性的对象调用arguments
。这不起作用,因为data has to be transferable,这意味着完全是JSON可序列化的或实现Transferable
(例如ArrayBuffer),arguments
不是。{/ p>
使用Array.prototype.slice.call(arguments, 0)
将arguments
转换为数组,如果内容正常,可以对其进行序列化(克隆)。