WebAssembly.Module.customSections()

Baseline 已廣泛支援

此功能已非常成熟,可在多種裝置和瀏覽器版本上使用。自 2017 年 10 月以來,它已在各大瀏覽器中可用。

WebAssembly.Module.customSections() 靜態方法返回給定模組中具有給定字串名稱的所有自定義節內容的副本。

語法

js
WebAssembly.Module.customSections(module, sectionName)

引數

模組

正在考慮其自定義節的 WebAssembly.Module 物件。

sectionName

所需自定義節的字串名稱。

返回值

一個(可能為空)陣列,其中包含所有匹配 sectionName 的自定義節內容的 ArrayBuffer 副本。

異常

如果 module 不是 WebAssembly.Module 物件例項,則會丟擲 TypeError

描述

Wasm 模組由一系列組成。其中大多數節由 Wasm 規範完全指定和驗證,但模組也可以包含自定義節,這些節在驗證過程中會被忽略和跳過。(閱讀 High level structure 以獲取有關節結構的資訊,以及普通節(“已知節”)和自定義節是如何區分的。)

這為開發人員提供了一種將自定義資料包含在 Wasm 模組中的方法,以用於其他目的,例如 name custom section,它允許開發人員為模組中的所有函式和區域性變數提供名稱(類似於原生構建中的“符號”)。

請注意,WebAssembly 文字格式目前沒有指定用於新增新自定義節的語法;但是,您可以在從文字格式轉換為 Wasm 的過程中將名稱節新增到您的 Wasm 中。wast2wasm 命令(作為 wabt tool 的一部分提供)有一個 --debug-names 選項 — 在轉換過程中指定此選項以獲得包含名稱自定義節的 Wasm,例如:

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

示例

使用 customSections

以下示例使用 WebAssembly.Module.customSections 來檢查載入的模組例項是否包含“name”自定義節。如果 WebAssembly.Module.customSections 返回的 ArrayBuffer 長度大於 0,則該模組包含“name”自定義節。

請參閱 custom-section.html 的 原始碼即時示例

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

規範

規範
WebAssembly JavaScript 介面
# dom-module-customsections

瀏覽器相容性

另見