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

我正在尝试编写一个 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,那么为什么它会在每个加载的页面上运行呢?


回首忆惘然
浏览 186回答 1
1回答

饮歌长啸

问题:正如您在文档中看到的那样,“背景”部分不能有“匹配项”&nbsp;。后台脚本在与选项卡无关的单独隐藏后台页面中运行。manifest.json 中声明的内容脚本在所有 URL 上运行。对于您想要完成的任务,您根本不需要内容脚本。解决方案包括几个步骤:删除“content_scripts”部分从“背景”部分删除“匹配”通过指定切换到事件页面脚本&nbsp;"persistent": false在 manifest.json 中添加“webNavigation”权限并使用它来检测 URL 导航。背景.js:chrome.webNavigation.onCompleted.addListener(closeTab, {&nbsp; url: [&nbsp; &nbsp; {urlPrefix: 'https://www.google.de/'},&nbsp; &nbsp; {urlPrefix: 'https://sghm.eu/iserv/login'},&nbsp; ]});function closeTab(e) {&nbsp; if (!e.frameId) {&nbsp; &nbsp; chrome.tabs.remove(e.tabId);&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript