PublicKeyCredential:isConditionalMediationAvailable() 静态方法

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中。

isConditionalMediationAvailable()PublicKeyCredential 接口的静态方法,它返回一个Promise,如果条件中介可用,则解析为 true

如果可用,条件中介会将任何发现的凭据与请求凭据的来源指示一起显示在非模态对话框中。这可以通过在 get() 调用中包含 mediation: 'conditional' 来请求。在实践中,这意味着自动填充可用的凭据;您需要在表单字段上包含 autocomplete="webauthn",以便它们显示 WebAuthn 登录选项。

条件 get() 调用不会显示浏览器 UI,并且会保持挂起状态,直到用户从可用的自动填充建议中选择一个帐户进行登录。

  • 如果用户在对话框外部执行手势,则对话框会关闭,并且不会解析或拒绝 Promise,也不会导致用户可见的错误条件。
  • 如果用户选择一个凭据,则该凭据将返回给调用方。

防止静默访问标志(请参阅CredentialsContainer.preventSilentAccess())将被视为 true,无论其实际值如何:如果发现适用凭据,则条件行为始终涉及某种用户中介。

注意:如果没有发现凭据,则不会显示非模态对话框,并且用户代理可以提示用户以取决于凭据类型的方式采取操作(例如,插入包含凭据的设备)。

语法

js
isConditionalMediationAvailable()

参数

无。

返回值

一个Promise,它解析为一个布尔值,指示条件中介是否可用。

示例

在调用条件 WebAuthn API 调用之前,请检查

  • 浏览器是否支持 Web 身份验证 API。
  • 浏览器是否支持 WebAuthn 条件 UI。
js
// Availability of `window.PublicKeyCredential` means WebAuthn is usable.
if (
  window.PublicKeyCredential &&
  PublicKeyCredential.isConditionalMediationAvailable
) {
  // Check if conditional mediation is available.
  const isCMA = await PublicKeyCredential.isConditionalMediationAvailable();
  if (isCMA) {
    // Call WebAuthn authentication
    const publicKeyCredentialRequestOptions = {
      // Server generated challenge
      challenge: ****,
      // The same RP ID as used during registration
      rpId: "example.com",
    };

    const credential = await navigator.credentials.get({
      publicKey: publicKeyCredentialRequestOptions,
      signal: abortController.signal,
      // Specify 'conditional' to activate conditional UI
      mediation: "conditional",
    });
  }
}

注意:有关使用条件中介的更多信息,请参阅通过表单自动填充使用密钥登录

规范

规范
Web 身份验证:访问公钥凭据的 API - 3 级
# dom-publickeycredential-isconditionalmediationavailable

浏览器兼容性

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