使用transferControlToOffscreen后重新附加画布上下文?

时间:2017-10-03 13:42:49

标签: javascript html5 canvas

我正在玩一个项目,我正在多个网络工作者中运行多个模拟。

当我需要查看模拟的当前状态时,我在主线程的canvas元素上使用transferControlToOffscreen,并将句柄传递给webworker。

问题是下次我尝试使用transferControlToOffscreen或者只是将现有句柄传递给另一个Web工作者时,浏览器会抱怨我无法重新放回画布。

An OffscreenCanvas could not be cloned because it was detached

在再次使用transferControlToOffscreen之前,是否需要调用一个函数重新连接画布?

编辑:我似乎无法使用MessageChannel在工作人员之间传递offscreenCanvas。

我唯一选择使画布的句柄无效是WorkerA,用新的(可能是克隆的)替换当前画布(在主线程中),然后将新的offscreenCanvas发送给工作者B?

2 个答案:

答案 0 :(得分:1)

事实证明,解决这个问题的唯一方法是克隆画布,用DOM替换它自己的克隆,然后在克隆上使用transferControlToOffscreen

答案 1 :(得分:0)

我发现这是在直接使用屏幕外变量(worker.postMessage({canvas: offscreen}, offscreen))调用worker.postMessage时发生的,只需将传输变量转换为数组worker.postMessage({canvas: offscreen}, [offscreen])即可解决。