google-chrome-extension - chrome.scripting.executeScript 无法在具有 `tabs` 和 `<all_urls>` 主机权限的现有选项卡上运行

标签 google-chrome-extension chrome-extension-manifest-v3

我有一个 chrome MV3 扩展,它具有以下 manifest.json:

{
  "manifest_version": 3,
  "permissions": [
    "scripting",
    "tabs"
  ],
  "host_permissions": ["<all_urls>"]
}

当我安装扩展程序并拥有现有选项卡时,我无法在这些现有选项卡上执行脚本:

chrome.scripting.executeScript({
  target: {tabId: 1305686273}, 
  func: function(){ console.log('hi'); }
});

我在后台服务工作线程脚本中收到此错误:

Cannot access contents of the page. Extension manifest must request permission to access the respective host.

我的理解是tabs权限让我无需用户手势即可查询所有选项卡,并且 "host_permissions": ["<all_urls>"]应该让我在所有选项卡上执行脚本而无需用户手势。

我错了,还是缺少一些东西来允许在没有用户手势的情况下在页面上编写脚本?

附注运行chrome.tabs.get(1305686273).then(console.log)按预期工作。

最佳答案

chrome.scripting 似乎会对安装扩展程序之前存在的选项卡引发此错误。

Cannot access contents of the page. Extension manifest must request permission to access the respective host.

对于任何新创建的选项卡,脚本都按预期工作,无论用户是否单击了扩展程序。

我发现一种解决方法是在这些预先存在的选项卡上调用 chrome.tabs.reload(tabId),然后 chrome.scripting 将按预期工作。

将向 Chrome 团队提出错误。

关于google-chrome-extension - chrome.scripting.executeScript 无法在具有 `tabs` 和 `<all_urls>` 主机权限的现有选项卡上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74318853/

相关文章:

google-chrome-extension - 在从 Google Chrome 网上商店安装我的 google-chrome-extension 之前,如何让用户同意我的 EULA?

javascript - 无法与我的 chrome 扩展共享我的屏幕

javascript - chrome 扩展命令行通信

javascript - ManifestV3 新 promise 错误 : The message port closed before a response was received

javascript - 如何从 Chrome 扩展服务 worker 中使用 IndexedDB

javascript - executeScript 未定义或不是 ManifestV3 扩展中的函数

google-chrome - https ://clients2. google.com/service/update2/crx 不再有效了吗?

javascript - 如何将文件下载到 Chrome 扩展程序中的扩展程序文件夹?

google-chrome-extension - Chrome 扩展 list V3 远程托管代码

google-chrome-extension - 如果 list v3 中不允许当前选项卡 url,则防止弹出