无法在'IDBObjectStore'上执行'put':无法克隆对象

时间:2017-03-21 20:05:16

标签: javascript google-chrome webassembly

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

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

有解决方案吗?

1 个答案:

答案 0 :(得分:1)

根据错误消息和StackOverflow标记,您似乎正在使用Chrome。自版本57(首次发布WebAssembly)起,Chrome不支持WebAssembly.Module structured cloning。这包括存储到IndexDB以及postMessage到工作者。

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

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

请注意,自版本52(第一个发布WebAssembly)以来,Firefox确实支持结构化克隆。