WebAssemblyで Web API を使用することは可能ですか?もしそうなら、どのように? ナビゲーターインターフェイス にもっと興味があります。
はい、可能です。
WebAssemblyツールチェーンを使用するときにJavaScript APIを呼び出す方法は、その特定のツールチェーン次第です。これは事実上FFIの形式です。C++コードからは外部関数を呼び出しているように見えますが、ツールチェーンは埋め込み機能(ここではブラウザーのJavaScript)にブリッジします。いくつかの例:
Emscriptenなどのツールチェーンは自動的にWebAssembly.instantiate
のimportObject
を生成します(.html
および.js
ファイルとともに)/したがって、内部WebAssemblyの詳細のほとんどは通常非表示になります(私はそれらを文書化します)未満)。
この設計により、JavaScript APIだけでなく、任意のJavaScriptコードを呼び出すことができます。したがって、WebAssemblyから独自のJavaScriptコードを呼び出すことができます。ツールチェーンは、Web APIの一般的なセットを、場合によってはクロスプラットフォームの方法で簡単に処理できるようにします。 SDL2 オーディオ、キーボード、マウス、ジョイスティック、およびグラフィックスを実行します。
WebAssemblyの JavaScript API を使用すると、 importObject
をWebAssembly.Instantiate
コンストラクターとWebAssembly.instantiate
関数に渡すことができます。
new Instance(moduleObject [, importObject])
Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}>
instantiate(BufferSource bytes [, importObject])
WebAssembly バイナリ形式 には インポートセクション が含まれています。ここで(LLVMなどのコンパイラを介して)使用するインポートを宣言します。これらのインポートされた各フィールドはimportObject
で検索され、関数 呼び出すことができます WebAssemblyのcall
およびcall_indirect
オペコードを介して検索されます。
したがって、任意のJavaScriptを呼び出すことができ、JavaScriptは任意のWebAPIを呼び出すことができます。将来的には、WebAssemblyは エンベッダーがAPIを直接公開できるようにする機能を獲得 、これを埋め込むブラウザーには、DOM、キャンバス、イベントなどが含まれる可能性があります。