【问题标题】:Cannot postMessage(CanvasRenderingContext2D)无法发布消息(CanvasRenderingContext2D)
【发布时间】:2015-02-10 20:59:53
【问题描述】:

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

sn-p 的目标是为worker 提供CanvasRenderingContext2D 的实例。

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

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

postMessage 失败是因为CanvasRenderingContext2D 的特定属性无法“克隆”吗?我可以考虑哪些解决方法?

【问题讨论】:

    标签: javascript canvas web-worker postmessage


    【解决方案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")))) 并尝试发送它们。 :/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2016-10-22
      • 2013-04-09
      • 2020-03-26
      • 2021-11-19
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多