如何判断是否支持某个权限的navigator.permissions.query

问题描述 投票:0回答:2

我有以下代码:

if (navigator.permissions && navigator.permissions.query) {
  navigator.permissions.query({
    name: 'clipboard-write'
  }).then(function(result) {
    if (result.state === 'granted') {
      //Do something!
    } else{
      //Not granted...
    }
} else {
  //Does not support navigator.permissions
}

这适用于 Safari 和 Chrome。 然而,在 Firefox 中,它会抛出此错误:

TypeError: 'name' member of PermissionDescriptor 'clipboard-write' is not a valid value for enumeration PermissionName.

支持

navigator.permissions.query
,但不支持
clipboard-write
。 那么,如何查看浏览器是否支持:

navigator.permissions.query({name:'clipboard-write'})

我想我也许可以检查正在使用的浏览器,但我认为必须有更好的方法来做到这一点。

编辑(尝试/捕获)

我尝试使用以下代码

try/catch

try {
  navigator.permissions.query({
    name:'clipboard-write'
  });
}
catch(error) {
  console.log(error);
}

不幸的是,这在 Firefox 中不是

catch

javascript firefox permissions cross-browser navigator
2个回答
11
投票

聚会有点晚了,但看到你没有得到任何答案,万一有人偶然发现这个问题:

navigator.permissions
返回一个 Promise,因此除了
.then()
之外,您还可以在 Promise 被拒绝时使用
.catch()

clipboard-write
现在似乎在 Firefox 中可用,所以我在这个例子中使用了
camera
,它在 Firefox 中仍然会失败(为了测试这个,任何无意义的值也可以这样做)。

navigator.permissions.query({
    name: 'camera'
  })
  .then((permissionObj) => {
    console.log(permissionObj);
    // ... check the permission object ...
  })
  .catch((error) => {
    // couldn't query the permission
    console.error(error);
  });


0
投票

对于 Firefox,我只是跳过权限并假设

navigator.clipboard.writeText
可用。

const copy = async(text) => {
  if (!navigator.userAgent.includes('Firefox')) {
    await navigator.permissions.query({
      name: 'clipboard-write'
    });
  }

  await navigator.clipboard.writeText(text);
  const result = await navigator.clipboard.readText();
  window.alert(result);
}
<html>
<body>
  <span onclick="copy('some text')">
        Click on me to copy 'some text'
    </span>
</body>
</html>

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard

所述

注意:Firefox 不支持剪贴板写入权限名称,仅 Chromium 浏览器支持。

然而

navigator.clipboard.writeText
仍然有效。 (使用 Firefox 133 测试)。

© www.soinside.com 2019 - 2024. All rights reserved.