我正在尝试编写一个 chrome 扩展,如果它们的链接包含特定的单词/字符串,则在加载它们时关闭标签。我的目的是解决使用matches中的声明manifest.json。不幸的是,这不起作用。我的manifest.json看起来像这样:{ "manifest_version": 2, "name": "Chrome Extension", "version": "0.1", "permissions": [ "tabs" ], "content_scripts": [ { "matches": [ "<all_urls>" ], "js": ["content.js"] } ], "background": { "matches": [ "https://www.google.de/", "https://sghm.eu/iserv/login" ], "scripts": ["background.js"], "persistent": true }}而我background.js是这样的:chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) { if (changeInfo.status == 'complete') { console.log('background running'); chrome.tabs.remove(tabId, function() { }); }})在我看来,我已经清楚地表达了脚本只在google和 上运行sghm.eu,那么为什么它会在每个加载的页面上运行呢?
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
问题:
正如您在文档中看到的那样,“背景”部分不能有“匹配项” 。后台脚本在与选项卡无关的单独隐藏后台页面中运行。
manifest.json 中声明的内容脚本在所有 URL 上运行。对于您想要完成的任务,您根本不需要内容脚本。
解决方案包括几个步骤:
删除“content_scripts”部分
从“背景”部分删除“匹配”
通过指定切换到事件页面脚本
"persistent": false
在 manifest.json 中添加“webNavigation”权限并使用它来检测 URL 导航。
背景.js:
chrome.webNavigation.onCompleted.addListener(closeTab, {
url: [
{urlPrefix: 'https://www.google.de/'},
{urlPrefix: 'https://sghm.eu/iserv/login'},
]
});
function closeTab(e) {
if (!e.frameId) {
chrome.tabs.remove(e.tabId);
}
}
添加回答
举报
0/150
提交
取消