WebAssembly.module.customSections
WebAssembly.module.customSections
这是一项
实验技术
在使用此产品之前,请仔细检查浏览器兼容性表。
WebAssembly.customSections()
函数返回给定字符串名称中给定模块中所有自定义部分内容的副本。
语法
var custSec = WebAssembly.Module.customSections(module, sectionName
参数
bufferSource
一个 类型化数组 或 ArrayBuffer,包含要编译的 .wasm 模块的二进制代码。
返回值
包含ArrayBuffer
所有自定义部分匹配内容副本(可能为空)的数组sectionName
。
异常
如果module
不是WebAssembly.Module
对象实例,则抛出TypeError
。
自定义部分
一个主模块由一系列的部分组成
。这些部分大多数都是由wasm规范完全指定和验证的,但是模块也可以包含在验证期间被忽略和跳过的自定义部分
。(阅读高层次的结构以获取关于部分结构的信息,以及如何区分正常部分(“已知部分”)和自定义部分
。)
这为开发人员提供了一种将自定义数据包含在wasm模块中用于其他目的的方法,例如名称custom部分,它允许开发人员为模块中的所有函数和本地名称(如本机构建中的“符号”)提供名称。
请注意,WebAssembly文本格式当前没有为添加新的自定义部分指定的语法; 您可以在从文本格式转换为.wasm的过程中为您的名字添加名称部分。作为wabt工具的一部分提供的wast2wasm命令有一个--debug-names
选项 - 在转换过程中指定这个选项以获得名称为custom的.wasm文件,例如:
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
示例
以下示例(请参阅custom-section.html 源代码和实例)编译和编译加载的simple-name-section.wasm字节代码。
然后我们用WebAssembly.Module.customSections
做一个检查,查看模块实例是否包含一个“名称”自定义部分,通过检查它的length
是否大于0.由于在示例中有一个“名称”部分,所以返回一个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]
};
}
规范
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript APIThe definition of 'customSections()' in that specification. | Draft | Initial draft definition. |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 57 | 16 | 522 | No | 44 | 11 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |