google-chrome - 如何在 Chrome 扩展程序中使用 navigator.clipboard.readText()?
问题描述
我编写了一个 Firefox 扩展来读取剪贴板,如果它有一些 PEM 证书,它将在新选项卡中打印它的详细信息。我正在尝试移植到 Chrome。这没用。我究竟做错了什么?
我在 manifest.json 中询问了 clipboardRead,并在后台脚本中运行它,它在 Firefox 中运行良好。
navigator.clipboard.readText().then(function (textFromClipboard) {
//do stuff with textFromClipboard
});
这在 Chrome 中失败,并显示“无法在 'Clipboard' 上执行 'readText':非法调用”。我究竟做错了什么?我怎样才能在 Chrome 中也能做到这一点?大多数答案涉及创建输入、获得焦点、执行粘贴。这真的很复杂,我希望我不必这样做。它在 Firefox 中运行得非常好,为什么它在 Chrome 中很复杂?
解决方案
您可以使用@bumble/clipboard
. 它是一个模拟剪贴板 API 的用于 Chrome 扩展的 npm 库。
它不需要用户交互,并且在后台脚本中工作。它只需要clipboardRead
或clipboardWrite
权限。
import { clipboard } from '@bumble/clipboard'
// Read text from the clipboard, or "paste"
clipboard.readText()
.then((text) => {
console.log('clipboard contents', text)
})
// Write text to the clipboard, or "copy"
clipboard.writeText('write this to the clipboard')
.then((text) => {
console.log(text, 'was written to the clipboard')
})
披露:我为自己编写了这个库来解决@ddreian 提到的相同问题。它是一个基于 Promise 的非阻塞解决方案,document.execCommand
在后台使用。
推荐阅读
- python - 如何在没有硬核的python的turtle模块中制作多个按钮
- spring - ElasticsearchItemReader 不断读取相同的记录
- javascript - 如何通过两种方式数据绑定以在 Bootstrap 中动态设置滑动切换?
- javascript - React Native Web - 找不到模块:无法解析'../../App'
- docker - 来自主机的更改后,Docker 容器中的文件没有得到更新
- laravel - 运行测试套件时重置自动增量(id)?
- c# - MarkupExtension 派生类名称:使用部分名称稍后引用它是有效的。重点是什么?
- javascript - 播放和暂停按钮在轮播中不起作用?
- php - 如何使用 acf 将自定义字段添加到 woocommerce 商店页面
- opencv - 加载 opencv.js 和它在 3.4.6 和更新版本中准备好之间是否有延迟?