首页 > 解决方案 > “未捕获(承诺)错误:'activeTab' 权限无效,因为尚未调用此扩展。” 在 Chrome 扩展程序中

问题描述

我有<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/它上面不起作用——即使有<all_urls>andactiveTab权限。

引用文档(强调我的),

为了调用此方法,扩展必须具有<all_urls> 权限或 activeTab 权限。除了扩展程序可以正常访问的站点外,此方法还允许扩展程序捕获原本受限制的敏感站点,包括chrome:-scheme pages、其他扩展程序的页面和 data: URL。这些敏感站点只能通过 activeTab 权限捕获。仅当扩展名已被授予文件访问权限时,才能捕获文件 URL。

我有<all_urls>activeTab,但仍然chrome://extensions不可用。当我尝试<all_urls>插入permissions钥匙时,我收到一条警告说,

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

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

我怎样才能解决这个问题?如果您需要更多信息,请在评论中提问。

标签: javascriptgoogle-chrome-extension

解决方案


你不能注入 chrome://extensions/ <-- 以前的评论

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

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

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

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

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


推荐阅读