为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅在特定链接上运行 background.js?

如何仅在特定链接上运行 background.js?

回首忆惘然 2021-12-12 10:45:00
我正在尝试编写一个 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 上运行。对于您想要完成的任务,您根本不需要内容脚本。

解决方案包括几个步骤:

  1. 删除“content_scripts”部分

  2. 从“背景”部分删除“匹配”

  3. 通过指定切换到事件页面脚本 "persistent": false

  4. 在 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);

  }

}


查看完整回答
反对 回复 2021-12-12
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信