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

浏览器兼容性

另见