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

Nad*_*dir 6 javascript permissions clipboard 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)

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

Gra*_*ain 0

这是故意的,又名。Firefox 中的设计。他们选择不将此 API 暴露给 WEB 内容,仅用于浏览器扩展。

请参阅此处以及更具体的此处供您参考:

目前,我们不打算向 Web 公开从剪贴板读取数据的功能(Clipboard.read 和 Clipboard.readText API)。这些 API 只能由扩展使用...