当试图在 chrome 中存储已编译的 wasm 模块时,这是我得到的错误:无法在 'IDBObjectStore' 上执行 'put':无法克隆对象。
但根据 MDN,这应该是可能的。 https://developer.mozilla.org/en-US/docs/WebAssembly/Caching_modules
有解决办法吗?
当试图在 chrome 中存储已编译的 wasm 模块时,这是我得到的错误:无法在 'IDBObjectStore' 上执行 'put':无法克隆对象。
但根据 MDN,这应该是可能的。 https://developer.mozilla.org/en-US/docs/WebAssembly/Caching_modules
有解决办法吗?
根据错误消息和 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)开始支持结构化克隆。