首页 > 解决方案 > 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 */
  }
});

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

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

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

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

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

所以我的问题是:我在请求权限时做错了什么,或者这个权限有什么改变?

标签: javascriptfirefoxpermissionsclipboard

解决方案


推荐阅读