如何在 chrome 扩展程序中永久授予 navigator.clipboard 权限?

How to permanently grant permission for navigator.clipboard in chrome extension?

我正在尝试在我的 Google Chrome 扩展程序打开的选项卡中使用 navigator.clipboard.readText()。当我这样做时,即使我已经授予了权限,以下权限警报也会出现在每次页面加载时:

这是相关代码:

<button onclick="getClipboardContents()">Add</button>

<script>
  async function getClipboardContents() {
    try {
      const text = await navigator.clipboard.readText();
      console.log('Pasted content: ', text);
    } catch (err) {
      console.error('Failed to read clipboard contents: ', err);
    }
  }
</script>

有没有办法阻止这条消息每次都出现?

这根本不可能。 Google chrome 显示这样的警告,以便用户可以授予剪贴板权限或拒绝权限。

您没有指定打开页面的方式。权限对话框表明您正在通过 file:// URL 访问它。由扩展程序打开的选项卡应该有一个 chrome-extension:// URL 并且权限对话框应该显示您的扩展程序的名称:

您需要将 clipboardRead 权限添加到您的 manifest.json 并使用 chrome.tabs.create()chrome.runtime.getURL() 打开选项卡。以这种方式完成后,权限对话框应该只出现在第一个页面加载时,而不是每次都出现。

这是一个最小的可重现示例:

manifest.json

{
  "manifest_version": 3,
  "name": "Clipboard Test",
  "version": "0.1",
  "permissions": [
    "clipboardRead"
  ],
  "action": {},
  "background": {
    "service_worker": "background.js"
  }
}

background.js

chrome.action.onClicked.addListener(currentTab => {
  chrome.tabs.create({
    'url': chrome.runtime.getURL("test.html")
  });
});

test.html

<!DOCTYPE html>
<title> Clipboard Test </title>
<button id="test"> TEST </button>
<script src="clip.js"></script>

clip.js

const button = document.querySelector('button#test');

async function paste() {
  let text = await navigator.clipboard.readText();
  alert(text);
}

button.addEventListener('click', paste);