WebAssembly.validate()

Baseline 广泛可用 *

此功能已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 10 月以来,它已在各大浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

WebAssembly.validate() 静态方法会验证给定的 WebAssembly 二进制代码的 类型化数组,返回该字节是否构成一个有效的 Wasm 模块 (true) 或否 (false)。

语法

js
WebAssembly.validate(bufferSource)
WebAssembly.validate(bufferSource, compileOptions)

参数

bufferSource

包含待验证的 WebAssembly 二进制代码的 类型化数组ArrayBuffer

compileOptions 可选

包含编译选项的对象。此参数包含在 validate() 方法中,以便在存在编译选项时(例如,用于实现功能检测)验证模块。属性可以包括

builtins 可选

一个字符串数组,用于启用在已编译的 Wasm 模块中使用 JavaScript 内置函数。这些字符串定义了您要启用的内置函数。目前唯一可用的值是 "js-string",它启用 JavaScript 字符串内置函数。

importedStringConstants 可选

一个字符串,指定 导入的全局字符串常量 的命名空间。如果您希望在 Wasm 模块中使用导入的全局字符串常量,则需要指定此属性。

返回值

一个布尔值,指定 bufferSource 是否为有效的 Wasm 代码 (true) 或否 (false)。

异常

如果 bufferSource 不是 类型化数组ArrayBuffer,则会抛出 TypeError

示例

使用 validate

下面的示例(请参阅 validate.html 的 源代码,以及 实时预览)会获取一个 Wasm 模块并将其转换为类型化数组。然后使用 validate() 方法来检查模块是否有效。

js
fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const valid = WebAssembly.validate(bytes);
    console.log(
      `The given bytes are ${valid ? "" : "not "}a valid Wasm module`,
    );
  });

使用启用 JavaScript 内建函数和全局字符串导入来验证模块

此示例使用启用了 JavaScript 字符串内建函数和导入的全局字符串常量来验证 Wasm 模块。如果有效,则在控制台记录 "Wasm module valid: true",如果无效,则记录 "Wasm module valid: false"查看实时运行

js
const compileOptions = {
  builtins: ["js-string"], // Enable JavaScript string builtins
  importedStringConstants: "string_constants", // Enable imported global string constants
};

fetch("log-concat.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.validate(bytes, compileOptions))
  .then((result) => console.log(`Wasm module valid: ${result}`));

规范

规范
WebAssembly JavaScript 接口
# dom-webassembly-validate

浏览器兼容性

另见