我正在尝试通过对焦点DOM元素执行“复制”命令来修改剪贴板的内容。但是,新内容来自服务器,来自Websocket,然后在非直接用户交互的回调中对其进行处理。
由于它不是由用户触发的,因此不允许执行Firefox's MDM website中指定的修改剪贴板内容的操作。错误消息是:
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
在同一站点中,权限文章显示了browser compatibility table,其中说Firefox支持版本51的clipboardWrite
和版本54的clipboardRead
。
问题是这些权限在Firefox上均不起作用(我正在使用Firefox 63)。永远不会调用查询回调。我尝试了四个许可名称,但没有任何运气。
为确保该机制正常运行,我测试了其他权限,例如notifications
,该权限运行正常(显示“提示”)
navigator.permissions.query({name: "notifications"}).then(result => {
alert(result.state)
});
所以我的问题是:请求权限时我做错什么了吗?还是更改了此权限?