我正在尝试制作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"]
);
答案 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()
]
});