使用 chrome 扩展中的剪贴板 API 写入剪贴板时,文档未聚焦错误

Luk*_*ich 5 javascript clipboard google-chrome-extension

我正在开发一个扩展程序,它拍摄页面可见部分的快照并将其复制到剪贴板。我决定使用新的剪贴板 API来做到这一点。处理捕获和复制的代码位于我的扩展程序的 background.js 中。这是相关部分的样子:

    chrome.tabs.captureVisibleTab(function(dataUrl) {
        convertToBlob(dataUrl).then((data) => {
            navigator.clipboard.write([
                new ClipboardItem({
                    'image/png': data
                })
            ]);
        });
    });
Run Code Online (Sandbox Code Playgroud)

此操作是通过单击我使用 注入页面的小部件触发的chrome.tabs.executeScript。我只在 Chrome 中工作。但是,每次尝试时,都会出现此错误:

Uncaught (in promise) DOMException: Document is not focused.
Run Code Online (Sandbox Code Playgroud)

最初,我认为我捕获的文档没有聚焦,但事实并非如此。我的document.hasFocus()回归真实。然后我想,出于某种我无法理解的原因,它希望 background.html 成为焦点。因此,我最终创建了一个包含输入字段的自定义 background.html,在执行 navigator.clipboard 访问之前,我会以编程方式关注并单击该输入。没有骰子。编辑:我执行了实际的页面检查并且 background.html 确实没有聚焦,即使我将焦点分配给它,这是有道理的。没有意义的是为什么会发生这种情况,因为我应该使用此 API 在任何上下文中将内容捕获到剪贴板。

我确实运行了 navigator.permissions 查询以查看是否授予了剪贴板写访问权限,并且确实如此。

在这一点上,我没有想法,有人有什么建议吗?谢谢!卢卡