WebAssembly ツアー 目次

参照を返す

このやり方では、オブジェクトへの参照を返したい場合に問題があります。 WebAssemblyからは数値しか渡すことができないからです!

これを乗り越えるためには、数値ハンドルを使ってJavaScriptのオブジェクトへの参照を保持する仕組みを導入するしかありません。

let query_selector_handle = register_function("
  (context, selectorStart, selectorEnd) => {
    let selector = context.getUtf8FromMemory(
      selectorStart,selectorEnd);
    let domEl = document.querySelector(selector);
    let objHandle = context.storeObject(domEl);
    return objHandle;
  }");

let selector = "#fancy-button";

let dom_element_handle = js_invoke_with_2_params(
  query_selector_handle,
  selector.as_ptr() as f64,
  selector.len() as f64
);