Может ли WebAssembly получить обратный вызов javascript? - PullRequest
0 голосов
/ 04 марта 2019

Можно ли передать обратный вызов JavaScript в WebAssembly?Можем ли мы вызвать событие из WebAssembly и прослушать его в javascript?

1 Ответ

0 голосов
/ 04 марта 2019

Я нашел эту статью от Кевина Хоффмана, пытающегося это сделать с помощью ржавчины.

Все сводится к использованию WebAssembly.instantiate(bufferSource, importObject), необязательно 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>

Прототип Rust

extern "C" {
   fn logit();
}

Ржавчина

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

Кредит

Все кредиты принадлежат Кевину Хоффману Артикул

...