WebAssembly 可以获取 javascript 回调吗?

Shu*_*ula 5 javascript event-driven webassembly

是否可以将 javascript 回调传递给 WebAssembly?我们可以从 WebAssembly 触发一个事件并在 javascript 中收听它吗?

Mic*_*ner 5

我发现这篇文章来自 Kevin Hoffman 尝试使用 rust。

归结为使用WebAssembly.instantiate(bufferSource, importObject)optional importObject。您可以在MDN上阅读有关此内容的更多信息。

这是文章的例子

网络客户端

<html>
 <head>
  <script>

   function logit() {
     console.log('this was invoked by Rust, written in JS');
   }

   let imports = {logit};

   fetch('wasm_project.gc.wasm')
     .then(r => r.arrayBuffer() )
     .then(r => WebAssembly.instantiate(r, { env: imports }))
     .then(wasm_module => {
       alert(`2 + 1 = ${wasm_module.instance.exports.add_one(2)}`);
     });
   </script>

 </head>
 <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

Rust 原型

extern "C" {
   fn logit();
}
Run Code Online (Sandbox Code Playgroud)

#[no_mangle]
pub extern fn add_one(a: u32) -> u32 {
    logit();
    a + 1
}
Run Code Online (Sandbox Code Playgroud)

信用

所有功劳都归功于凯文霍夫曼的文章