作为自定义库的一部分,我隔离了以下代码片段,从主浏览器的线程运行,产生错误:
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
失败?我可以考虑哪些变通方法?
答案 0 :(得分:1)
由于CanvasRenderingContext2D的特定属性导致postMessage失败,无法克隆"?
我猜这些都是所有的功能。
Things that don't work with structured clones:
Error
和Function
个对象不能被结构化克隆算法复制;尝试这样做会引发DATA_CLONE_ERR
例外。
这听起来像你的面孔。
您无法发送整个<canvas>
元素,因为
尝试克隆DOM节点同样会引发
DATA_CLONE_ERR
异常。
我不知道这是否可行,但你可能需要的只是属性的上下文(fillStyle,lineHeight等)。您可以只提取它们(JSON.parse(JSON.stringify(canvas.getContext("2d")))
)并尝试发送它们。 :/