javascript - 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 */
}
});
但是,认为他们使用不同的权限名称的文章:
clipboard-write
clipboard-read
clipboardWrite
clipboardRead
在同一个站点中,权限文章显示了一个浏览器兼容性表,其中说 FirefoxclipboardWrite
从版本 51 和clipboardRead
版本 54 开始支持。
问题是这些权限都不适用于 Firefox(我使用的是 Firefox 63)。查询回调永远不会被调用。我已经尝试了四个权限名称,但没有任何运气。
为了确保该机制正常工作,我测试了其他权限,例如notifications
完美运行(显示“提示”)
navigator.permissions.query({name: "notifications"}).then(result => {
alert(result.state)
});
所以我的问题是:我在请求权限时做错了什么,或者这个权限有什么改变?
解决方案
推荐阅读
- php - Table data is not arranged
- google-cloud-firestore - "Cannot find name 'serviceworkerregistration'" when using firebase >= 5.0.1 in cloud functions
- javascript - Change variable text colour
- vue.js - Vue.js 路由器过渡淡入淡出间隙
- angular5 - Emit an event through service in Angular
- scala - 如何在scala宏中为更高种类的类型参数获取树
- java - 具有递归的 Codewars 持久性方法?
- react-native - How to create 'Global' popup modal in react native?
- java - 如何修复 Android 中的“尝试在空对象引用上调用 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'”错误
- javafx - 从不同控制器添加新数据时如何更新表格视图