Navigator: requestMIDIAccess() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

Navigator 接口的 requestMIDIAccess() 方法返回一个 Promise,它代表着请求访问用户系统的 MIDI 设备。此方法是 Web MIDI API 的一部分,该 API 提供了访问、枚举和操作 MIDI 设备的方法。

此方法可能会提示用户授予访问其系统上可用 MIDI 设备的权限,或者它可能会使用先前建立的首选项来授予或拒绝访问。如果获得权限,则 Promise 会解析并返回一个 MIDIAccess 对象。

语法

js
requestMIDIAccess()
requestMIDIAccess(MIDIOptions)

参数

MIDIOptions 可选

一个 Object,代表要传递给方法的选项。这些选项是:

sysex

一个 Boolean 值,如果设置为 true,则允许发送和接收系统独占 (sysex) 消息。默认值为 false

software

一个 Boolean 值,如果设置为 true,则允许系统使用任何已安装的软件合成器。默认值为 false

返回值

一个 Promise,它会解析为一个 MIDIAccess 对象。

异常

AbortError DOMException

如果由于用户导航而关闭了文档或页面,则会抛出此异常。

InvalidStateError DOMException

如果底层系统引发任何错误,则会抛出此异常。

NotSupportedError DOMException

如果系统不支持该功能或选项,则会抛出此异常。

SecurityError DOMException

如果用户或系统拒绝应用程序使用请求的选项创建 MIDIAccess 对象,或者文档不允许使用该功能(例如,由于 权限策略,或者因为用户先前拒绝了权限请求),则会抛出此异常。

安全要求

API 的访问受以下约束:

  • 必须在 安全上下文 中调用该方法。
  • 访问可能会受到 midi HTTP 权限策略 的限制。
  • 用户必须通过用户代理特定的机制明确授予使用 API 的权限,或者必须先前已授予权限。请注意,如果权限策略拒绝访问,则无法通过用户权限授予。

可以使用 Permissions API 方法 navigator.permissions.query() 查询权限状态,并传递一个包含 midi 权限和(可选)sysex 属性的权限描述符。

js
navigator.permissions.query({ name: "midi", sysex: true }).then((result) => {
  if (result.state === "granted") {
    // Access granted.
  } else if (result.state === "prompt") {
    // Using API will prompt for permission
  }
  // Permission was denied by user prompt or permission policy
});

示例

请求 MIDI 访问

在以下示例中,Navigator.requestMIDIAccess() 方法返回 MIDIAccess 对象,该对象提供了对输入和输出 MIDI 端口信息的访问。

js
navigator.requestMIDIAccess().then((access) => {
  // Get lists of available MIDI controllers
  const inputs = access.inputs.values();
  const outputs = access.outputs.values();
  // …
});

规范

规范
Web MIDI API
# dom-navigator-requestmidiaccess

浏览器兼容性

另见