通过 postMessage 传递图像数据在 chrome 上不起作用

Passing ImageData via postMessage doesnt work on chrome

编辑:

它最终是非常相关的信息,只有当 ImageDate 来自 WASM 时才会发生这种情况,我不知道为什么这很重要。如果有人知道这种行为并且可以解释为什么这种情况发生在源自 WASM 的 ImageData 上,我们将不胜感激。

我一直在开发一个没有奇怪的 JS 恶作剧、没有奇怪的库等的网站。 但是当尝试使用 chrome 中的 postMessage 将 ImgData 对象从 webworker 传递到主线程时,我在另一端得到 null。

ImageData 应该被 structured clone algorithm which is what postMessage uses (postmessage docs) 支持。 这在 Firefox 中有效,并且不会在 chrome 中给出任何 crash/throw/warning,它只是不传递数据。

console.log(ret); // properly displays the ImageData with data, width and height.
postMessage(ret); // no throw or anything
myWorker.onmessage =  function(e) {
    console.log(e); // e.data==null
    // use e.Data as ImageData, which crashes.
}

如果我只传入一个随机字符串进行测试,它确实可以正常工作。有谁知道这里可能出了什么问题?

我已经尝试了 webworkers 的所有错误事件,但没有一个被调用,所以没有

我不知道为什么 Chrome 不起作用,但我建议您尝试分别发送基础 imageData.data 数组以及 widthheight

const {data, width, height} = imageData;
postMessage({data, width, height})

然后你可以在接收端重新构造它。