このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

WebAssembly.Module.customSections()

Baseline
広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年10月以降、すべてのブラウザーで利用可能です。

WebAssembly.customSections() 関数はモジュールと文字列名を指定して、すべてのカスタムセクションのコンテンツのコピーを返します。

構文

js
WebAssembly.Module.customSections(module, sectionName);

引数

module

カスタムセクションを考慮する WebAssembly.Module オブジェクト。

sectionName

目的のカスタムセクションの文字列名。

返値

sectionName に一致するすべてのカスタムセクションの ArrayBuffer コピーの配列 (空の場合もあります)。

例外

module が WebAssembly.Module オブジェクトのインスタンスでない場合、TypeError が発生します。

解説

wasm モジュールは一連の セクション で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、検証されますが、検証中に無視されスキップされる カスタムセクション をモジュールに含めることができます (通常のセクション ("既知のセクション") とカスタムセクションを区別するための情報は 高レベルの構造 を読んでください)。

これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) ネームカスタムセクション のようなものがあります 。

なお、 WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。 wabt tool の一部である wast2wasm コマンドで --debug-names オプションを指定することができ、これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます。

bash
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names

例

customSections の使用

次の例では (custom-section.html のソースと動作例をご確認ください) 、読み込んだ section.wasm バイトコードをコンパイルします。

それから、WebAssembly.Module.customSections を使用して length が 0 より大きいかチェックして、モジュールに "name" カスタムセクションが含まれているかどうかチェックします。この例では "name" カスタムセクションが存在するため、ArrayBuffer オブジェクトが返されます。

js
WebAssembly.compileStreaming(fetch("simple-name-section.wasm")).then(
  function (mod) {
    var nameSections = WebAssembly.Module.customSections(mod, "name");
    if (nameSections.length != 0) {
      console.log("Module contains a name section");
      console.log(nameSections[0]);
    }
  },
);

仕様書

仕様書
WebAssembly JavaScript Interface
# dom-module-customsections

ブラウザーの互換性

関連情報