【问题标题】:"Uncaught (in promise) Error: The 'activeTab' permission is not in effect because this extension has not been in invoked." in Chrome Extension“未捕获(承诺中)错误:'activeTab' 权限无效,因为尚未调用此扩展。”在 Chrome 扩展程序中
【发布时间】:2021-06-30 19:03:36
【问题描述】:

我拥有<all_urls> 主机权限和activeTab 权限,但此错误出现在chrome://extensions/ 上。这是我的清单(删除了不重要的细节):

{
    "action": {
        "default_icon": {...},
        "default_popup": "...",
        "default_title": "..."
    },
    "author": "...",
    "background": {
        "service_worker": "./some-js-1.js"
    },
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["./some-js-2.js"]
    }],
    "description": "...",
    "host_permissions": [
        "<all_urls>"
    ],
    "icons": {...},
    "manifest_version": 3,
    "name": "...",
    "options_page": "...",
    "permissions": [
        "activeTab",
        "storage",
        "tabs"
    ],
    "short_name": "...",
    "version": "..."
}

在我的后台脚本 (./some-js-1.js) 中,这是截取屏幕截图的代码:

browser.windows.getCurrent().then(function(win){
    browser.tabs.captureVisibleTab(win.id,{
        "format":"png"
    }).then(function(dataURI){
        console.log(dataURI);
        // do something with it
    });
});

它在大多数地方都有效,但在 chrome://extensions/ 上无效 - 即使有 &lt;all_urls&gt;activeTab 权限。

引用the documentation(强调我的),

要调用此方法,扩展程序必须具有 权限或activeTab 权限。除了扩展程序可以正常访问的站点之外,此方法还允许扩展程序捕获原本受限制的敏感站点,包括 chrome:-scheme 页面、其他扩展程序的页面和 data: URL。 这些敏感站点只能在 activeTab 权限下被捕获。只有在扩展程序被授予文件访问权限的情况下才能捕获文件 URL。

我同时拥有&lt;all_urls&gt;activeTab,但仍然无法使用chrome://extensions。当我尝试将&lt;all_urls&gt; 放入permissions 键时,我收到一条警告,提示:

Permission '<all_urls>' is unknown or URL pattern is malformed.

我在host_permissions 中有它,因为我想访问所有主机,但似乎仍然没有授予权限(或者我做错了什么)。

我该如何解决这个问题?如果您需要更多信息,请在 cmets 中询问。

【问题讨论】:

  • @Robbi:我没有注入任何代码,我只是截屏。如果我注入代码或截屏,有什么区别吗?文档说如果你同时拥有activeTab&lt;all_urls&gt;,则可以截取chrome:-scheme 页面,所以我希望能够截取chrome://extensions 页面。
  • 就像错误(在标题中)所说,captureVisibleTab 仅在从侦听器invoked by a user 调用时才有效。
  • @wOxxOm:您可以将其发布为答案吗?我很确定这一定是发生了错误 - activeTab 权限未激活,因为它提供了对活动选项卡的 临时 访问权限,而不是像我使用的 tabs 权限那样的永久访问权限!这个错误对我来说很难理解(主要是“in invoked”部分很难)。

标签: javascript google-chrome-extension


【解决方案1】:

你不能注入 chrome://extensions/

我很仓促,没有正确阅读所有内容。 我从未使用过“captureVisibleTab”,但我很快阅读了规范,看来您已正确包含“activeTab”权限。

另一方面,从清单中可以清楚地看出,您希望将脚本注入每个页面。

我的建议(这可能会让你无处可去)是评论清单中的“content_scripts”部分,然后重新安装扩展程序,看看是否仍然抛出该错误。

另外,我建议您将后台脚本中的 captureVisibleTab 操作绑定到 browserAction 单击或上下文菜单项。

最后,不能排除这个API在MV3版本中可能存在一些bug

【讨论】:

  • 好的,我稍后会尝试您的建议,并在我尝试后将结果回复您。
  • 评论内容脚本没有帮助。我认为@wOxxOm 有答案(你也有)关于activeTab 只允许 temporary 访问活动选项卡。谢谢!
  • 完美,正如我们都建议你的那样,将该 api 调用绑定到 browserAction 或 contextMenu 项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2018-09-24
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多