WebAssembly.Module.customSections()

**WebAssembly.Module.customSections()** 静态方法返回给定模块中所有具有给定字符串名称的自定义节的内容的副本。

语法

js
WebAssembly.Module.customSections(module, sectionName)

参数

module

正在考虑其自定义节的WebAssembly.Module 对象。

sectionName

所需自定义节的字符串名称。

返回值

一个(可能为空)数组,包含与sectionName匹配的所有自定义节内容的ArrayBuffer 副本。

异常

如果module不是WebAssembly.Module 对象实例,则会抛出TypeError

描述

Wasm 模块由一系列**节**组成。这些节中的大多数都由 Wasm 规范完全指定和验证,但模块还可以包含在验证期间被忽略和跳过的**自定义节**。(阅读高级结构以获取有关节结构以及如何区分普通节(“已知节”)和自定义节的信息。)

这为开发人员提供了一种方法,可以在 Wasm 模块中包含用于其他目的的自定义数据,例如名称自定义节,它允许开发人员为模块中的所有函数和局部变量提供名称(如原生构建中的“符号”)。

请注意,WebAssembly 文本格式目前没有为添加新的自定义节指定语法;但是,您可以在从文本格式转换为 Wasm 的过程中向 Wasm 添加名称节。wast2wasm命令作为wabt 工具的一部分可用,它有一个--debug-names选项 - 在转换期间指定此选项以获取带有名称自定义节的 Wasm,例如

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

示例

使用 customSections

以下示例使用WebAssembly.Module.customSections检查加载的模块实例是否包含“name”自定义节。如果WebAssembly.Module.customSections返回长度大于 0 的ArrayBuffer,则模块包含“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

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅