5

我正在开发一个名为 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/

还有一张火王尾宰的照片:

在此处输入图像描述

4

1 回答 1

6

您正在尝试postMessage使用具有引用属性的对象进行调用arguments。这是行不通的,因为数据必须是可传输的,这意味着要么完全 JSON 序列化,要么实现Transferable(例如 ArrayBuffer),但事实arguments并非如此。

用于Array.prototype.slice.call(arguments, 0)转换arguments成数组,如果内容OK就可以序列化(克隆)。

更正了小提琴

于 2013-10-29T19:58:38.467 回答