在子域中的某个位置使用特定单词阻止URL

时间:2013-11-13 14:57:14

标签: javascript google-chrome google-chrome-extension subdomain

我正在尝试制作Chrome扩展程序,以阻止子域中包含特定单词的网址,但不阻止该网域中的其他网址。例如,假设我想在子域中使用“cola”一词来阻止所有tumblr博客。

它应该可以阻止此页面:http://coca-cola.tumblr.com/

我尝试使用此网址匹配:urls:["*://*cola*.tumblr.com/*"],但它无效。而且我想不出任何可能有效的其他组合。有人能指出我正确的方向吗?

这是我的完整背景.js:

chrome.webRequest.onBeforeRequest.addListener(
    function() {
        return {cancel: true };
    },
    {
        urls:["*://*cola*.tumblr.com/*"] // This is the part I'm messing up.
    },
    ["blocking"]
);

1 个答案:

答案 0 :(得分:2)

您的代码失败,因为*://*cola*.tumblr.com/*不是有效match pattern。通配符只能用于URL的路径组件,或者在主机名的开头。

如果要阻止其子域包含某个关键字的网址,则需要匹配整个域,并使用JavaScript检查子域是否包含亵渎字。

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        var hostname = details.url.split('/', 3)[2];
        return {
            cancel: hostname.indexOf('cola') >= 0
        };
    },
    {
        urls:["*://*.tumblr.com/*"]
    },
    ["blocking"]
);

或使用chrome.declarativeWebRequest API(为简洁起见省略了chrome.runtime.onInstalled事件):

chrome.declarativeWebRequest.onRequest.addRules({
    id: 'some rule id',
    conditions: [
        new chrome.declarativeWebRequest.RequestMatcher({
            url: {
                hostContains: 'cola',
                hostSuffix: '.tumblr.com'
            }
        })
    ],
    actions: [
        new chrome.declarativeWebRequest.CancelRequest()
    ]
});