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

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

我试图通过在聚焦的 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 */
  }
});

但是,认为文章中他们使用不同的名称来表示权限:

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

在同一站点中,权限文章显示了 浏览器兼容性表,其中表示 Firefox 支持版本 51 的

clipboardWrite
和版本 54 的
clipboardRead

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

为了确保该机制正常工作,我测试了其他权限,例如

notifications
,它运行完美(它显示“提示”)

navigator.permissions.query({name: "notifications"}).then(result => {
  alert(result.state)
});

所以我的问题是:我在请求权限时是否做错了什么,或者此权限是否已更改?

javascript firefox permissions clipboard
2个回答
0
投票

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

参见这里,更具体地这里供您参考:

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


0
投票

在 Firefox 124.0.1(可能更高)中,在 about:config 中将 dom.events.asyncClipboard.clipboardItem 设置为 true 来启用它。

背景: 我不明白围绕此的权限策略讨论(这似乎阻止了该功能在 Firefox 中发布)。访问剪贴板是有风险的,所以只需询问客户端的用户“站点喜欢访问剪贴板 - 可以吗”,就像 Edge 那样。

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