MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

WebAssembly.Module.customSections()

これは実験段階の機能です。
この機能は複数のブラウザーで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザーの将来のバージョンで変更になる可能性があることに注意してください。

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

構文

var custSec = WebAssembly.Module.customSections(module, sectionName);

パラメータ

module
カスタムセクションが考慮されている WebAssembly.Module オブジェクト。
sectionName
目的のカスタムセクションの文字列名。

戻り値

sectionName にマッチした全てのカスタムセクションの ArrayBuffer コピーの配列 (もしかしたら空の場合もあります) 。

例外

もし module が WebAssembly.Module オブジェクトインスタンスでない場合、TypeError がスローされます。

カスタムセクション

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

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

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

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

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

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

fetch('simple-name-section.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.compile(bytes)
).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]);
  };
});

仕様

仕様 策定状況 コメント
Web Assembly JavaScript API
customSections() の定義
ドラフト 初回ドラフト定義。

ブラウザ実装状況

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
基本サポート 57 15[2] 52 (52)[1] 未サポート 44 11
Feature Chrome for Android Android Webview Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 57 57 未サポート 52.0 (52)[1] 未サポート 未サポート 11

[1] WebAssemblyはFirefox 52+で有効です。Firefox 52 Extended Support Release (ESR.)では無効化されています。

[2] 現在、“Experimental JavaScript Features” フラグを付けることでサポートされます。詳細については このブログ記事 を参照してください。

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: syu_kato
 最終更新者: syu_kato,