0

当试图在 chrome 中存储已编译的 wasm 模块时,这是我得到的错误:无法在 'IDBObjectStore' 上执行 'put':无法克隆对象。

但根据 MDN,这应该是可能的。 https://developer.mozilla.org/en-US/docs/WebAssembly/Caching_modules

有解决办法吗?

4

1 回答 1

1

根据错误消息和 StackOverflow 标签,您似乎正在使用 Chrome。从 57 版(WebAssembly 首次发布)开始,Chrome 不支持结构化克隆. WebAssembly.Module这包括存储到 IndexDB 以及postMessage工作人员。

正如您所指出的,IndexDB 确实由 WebAssembly指定并记录在 MDN中,但并非所有浏览器都必须实现它。你必须优雅地处理失败。无论如何,这都是必需的:允许 IndexDB 因其他原因而失败。即使浏览器支持结构化克隆也可能会失败!

在 V8 中有一个命令行标志来改变这种行为:--wasm-disable-structured-cloning=false. 在 Chrome 中可以更改相同的行为chrome://flags/#enable-webassembly(在浏览器的导航栏中输入此 URL,更改选项,重新启动浏览器)。

请注意,Firefox 从版本 52(第一个发布 WebAssembly)开始支持结构化克隆。

于 2017-03-21T20:12:49.830 回答