站点与manifest.json'匹配'不匹配时的事件处理程序

时间:2017-03-28 11:15:08

标签: google-chrome-extension

我的manifest.json包含这个块:

"content_scripts": [
    {
        "all_frames": true,
        "matches": [
            "*://www.google.com/*",
            "*://www.cnn.com/*",
            "*://*.foxnews.com/*"
        ],
        "js": ["js/main.js"]
        }
    ],

每当用户访问匹配我的{{}中某个网站的网站时,我需要触发一个事件(无论是在我的内容js还是background.js中,无关紧要) 1}}设置。

怎么做?

2 个答案:

答案 0 :(得分:0)

background.js中,您可以为标签加载添加一个监听器。在此,您可以获取当前选项卡的URL并与列表匹配。

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
    if (info.status == "complete") {
        var url = tab.url.replace(/.*?:\/\//g, "").replace(/\/$/, ""); //removes the protocol

        var allowedURLS = ["www.google.com", "www.cnn.com", "foxnews.com"];

        for(var i in allowedURLs) {
            if(allowedURLs[i].indexOf(url) == -1) {
                //URL does not match

                break;
            }
        }
    }
});

答案 1 :(得分:0)

您需要在内容脚本中使用 exclude_matches ,表示其下的脚本不会注入。

来自Google documentation

  

排除此内容脚本将被注入的页面。有关如何排除URL的信息,请参阅匹配模式以获取有关这些字符串语法的更多详细信息以及匹配模式和全局。

对于你的情况:

"content_scripts": [
{
   "all_frames": true,
    "matches": ["<all_urls>"],
    "js": ["js/main.js"],
    "exclude_matches": [
         "*://www.google.com/*",
        "*://www.cnn.com/*",
        "*://*.foxnews.com/*",

    ]

  }
]