小编Nad*_*dir的帖子

Javascript:在Firefox上查询剪贴板权限不起作用

我正在尝试通过在焦点DOM元素上执行“复制”命令来修改剪贴板的内容。但是,新内容来自服务器,并且来自Websocket,然后在非直接用户交互的回调中对其进行处理。

因为它不是由用户触发的,所以不允许这样做,例如修改Firefox的MDM网站中指定的剪贴板内容。错误消息是:

document.execCommand('cut'/'copy')被拒绝,因为没有从运行时间短的用户生成的事件处理程序内部调用它。

为解决此问题,同一页面建议通过以下方式请求浏览器的权限navigator.permissions.query()

navigator.permissions.query({name: "clipboard-write"}).then(result => {
  if (result.state == "granted" || result.state == "prompt") {
    /* write to the clipboard now */
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,请以为文章中的权限使用了不同的名称:

  • clipboard-write
  • clipboard-read
  • clipboardWrite
  • clipboardRead

在同一站点中,权限文章显示了一个浏览器兼容性表,其中说Firefox支持clipboardWrite版本51和clipboardRead版本54。

问题是这些权限在Firefox上均不起作用(我正在使用Firefox 63)。永远不会调用查询回调。我尝试了四个许可名称,但没有任何运气。

为确保该机制正常运行,我测试了其他权限,例如,notifications这些权限均正常运行(显示为“提示”)

navigator.permissions.query({name: "notifications"}).then(result => {
  alert(result.state)
});
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:请求权限时我做错什么了吗,或者此权限有任何更改?

javascript permissions clipboard firefox

6
推荐指数
1
解决办法
515
查看次数

标签 统计

clipboard ×1

firefox ×1

javascript ×1

permissions ×1