首页 > 解决方案 > 通过 postMessage 传递 ImageData 在 chrome 上不起作用

问题描述

编辑:

它最终成为非常相关的信息,这只发生在 ImageDate 来自 WASM 时,我不知道为什么这很重要。如果有人对这种行为有所了解并且可以解释为什么这种情况发生在源自 WASM 的 ImageDatas 上,那么只有一个答案将受到高度赞赏。

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

ImageData 应该由postMessage 使用的结构化克隆算法支持( postmessage docs)。这适用于 Firefox,并且不会在 chrome 中给出任何崩溃/抛出/警告,它只是不传递数据。

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.
}

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

我已经为网络工作者尝试了所有错误事件,但没有一个被调用,所以没有

标签: javascriptweb-workerwebassemblypostmessage

解决方案


我不知道为什么 Chrome 不起作用,但我建议您尝试分别发送底层imageData.data数组和widthand height

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

然后,您可以在接收端重新构建它。


推荐阅读