我正在玩一个项目,我正在多个网络工作者中运行多个模拟。
当我需要查看模拟的当前状态时,我在主线程的canvas元素上使用transferControlToOffscreen,并将句柄传递给webworker。
问题是下次我尝试使用transferControlToOffscreen或者只是将现有句柄传递给另一个Web工作者时,浏览器会抱怨我无法重新放回画布。
An OffscreenCanvas could not be cloned because it was detached
在再次使用transferControlToOffscreen之前,是否需要调用一个函数重新连接画布?
编辑:我似乎无法使用MessageChannel在工作人员之间传递offscreenCanvas。
我唯一选择使画布的句柄无效是WorkerA,用新的(可能是克隆的)替换当前画布(在主线程中),然后将新的offscreenCanvas发送给工作者B?
答案 0 :(得分:1)
事实证明,解决这个问题的唯一方法是克隆画布,用DOM替换它自己的克隆,然后在克隆上使用transferControlToOffscreen
答案 1 :(得分:0)
我发现这是在直接使用屏幕外变量(worker.postMessage({canvas: offscreen}, offscreen)
)调用worker.postMessage时发生的,只需将传输变量转换为数组worker.postMessage({canvas: offscreen}, [offscreen])
即可解决。