<!DOCTYPE HTML>
<html>
<head>
<title>Checklist</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
</head>
<body>
<input type="text" id="item" placeholder="Enter an item">
<button id="add">Add Item</button>
</body>
</html>
我没有看到任何可以否定网址格式的方法。基本上我想匹配并阻止除3个域之外的所有内容。我想到了返回cancel:true for和3个域的确切内容。首先是工作或将是一个倾听者&#34;过度采取&#34;另一个?如何返回确切的内容(所以不再取消:true)。
答案 0 :(得分:3)
以下示例说明了如何阻止除domain1.net和domain2.net的请求之外的所有请求:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {cancel: details.url.indexOf(".domain2.net/") == -1 && details.url.indexOf(".domain1.net/") == -1};
},
{urls: ["<all_urls>"]},
["blocking"]);
中看到任何否定网址格式的方法
以下答案由Xan提供,有更好的方法来验证domain1.net和domain2.net网址。
答案 1 :(得分:3)
虽然保罗·普雷斯特斯的答案大多是正确的(包括&#34;负面&#34;过滤器不可能),但建议的过滤器很容易被绕过。
考虑:https://example.com/something?foo=.domain2.net/
这符合规则,但显然不是故意的。添加意外参数不会影响大多数页面,因此它是一个非常微不足道的旁路。
调整为提取域的正则表达式集合应该更加健壮:
function validUrl(url) {
// RegEx, explained:
// ^ at the beginning of the string
// http exactly "http"
// s? "s" or nothing
// :\/\/ exactly "://"
// ([^\/]+\.)? (one or more not-"/" followed by ".") or nothing
// domain\.net\/ exactly "domain1.net/"
return /^https?:\/\/([^\/]+\.)?domain1\.net\//.test(url) ||
/^https?:\/\/([^\/]+\.)?domain2\.net\//.test(url) ||
/^https?:\/\/([^\/]+\.)?domain3\.net\//.test(url)
}
/* ... */
return {cancel: !validUrl(details.url)};
/* ... */