不能postMessage(CanvasRenderingContext2D)

时间:2015-02-10 20:59:53

标签: javascript canvas web-worker postmessage

作为自定义库的一部分,我隔离了以下代码片段,从主浏览器的线程运行,产生错误: DataCloneError: The object could not be cloned.

该代码段的目标是为worker提供CanvasRenderingContext2D的实例。

canvas = document.createElement("canvas");
canvas.width = 1;
canvas.height = 1;

worker.postMessage(canvas.getContext("2d"));

由于postMessage的特定属性无法“克隆”导致CanvasRenderingContext2D失败?我可以考虑哪些变通方法?

1 个答案:

答案 0 :(得分:1)

  

由于CanvasRenderingContext2D的特定属性导致postMessage失败,无法克隆"?

我猜这些都是所有的功能。

  

Things that don't work with structured clones:

     

ErrorFunction个对象不能被结构化克隆算法复制;尝试这样做会引发DATA_CLONE_ERR例外。

这听起来像你的面孔。

您无法发送整个<canvas>元素,因为

  

尝试克隆DOM节点同样会引发DATA_CLONE_ERR异常。

我不知道这是否可行,但你可能需要的只是属性的上下文(fillStyle,lineHeight等)。您可以只提取它们(JSON.parse(JSON.stringify(canvas.getContext("2d"))))并尝试发送它们。 :/