我正在开发一个扩展,它将对所有谷歌搜索url执行一定的动作-但不是在其他网站或谷歌页面。在自然语言中,匹配模式为:
- 任意协议(
'*://'
) - 任意子域或无(
'www'
或''
) - 域字符串必须等于
'google'
- 任何顶级域名,包括三字母顶级域名(如
'.com'
)和多部分国家顶级域名(如'.co.uk'
) - 路径的前8个字母必须等于
'/search?'
许多人说'匹配所有的谷歌搜索页面使用"*://*.google.com/search?*"
,但这显然是不真实的,因为它不会匹配像google.co.uk这样的国家顶级域名。
因此下面的代码根本不起作用:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
alert('This never happens');
}, {
urls: [
"*://*.google.*/search?*",
"*://google.*/search?*",
],
types: ["main_frame"]
},
["blocking"]
);
使用"*://*.google.com/search?*"
作为匹配模式确实工作,但我担心我需要一个每个单一的谷歌本地化列表,这是一个有效的策略。
不幸的是,出于安全原因,匹配模式不允许通配符用于顶级域名。
您不能使用通配符匹配模式,如
http://google.*/*
来匹配顶级域名(如http://google.es
和http://google.fr
)实际限制这种匹配的复杂性域。对于
http://google.*/*
的示例,Google域名将是匹配,但http://google.someotherdomain.com
也匹配。此外,许多网站并不拥有其域名的所有顶级域名。对于一个例如,假设您想使用http://example.*/*
来匹配http://example.com
和http://example.es
,但http://example.net
是a恶意网站。如果您的扩展有一个错误,恶意网站可以可能会攻击您的扩展,以便访问您的扩展增加的权限。您应该显式枚举希望运行您的扩展。
一个稍微不现实的选择是列出所有国家顶级域名的所有变体。
编辑:感谢rsanchez的一个非常有帮助的评论,这里是所有谷歌域名变体的最新列表,使这种方法可行。
一个现实的选择是注入更大的页面集(例如,所有页面),然后分析URL(例如,使用regexp),并仅在它与您正在寻找的模式匹配时执行。是的,这将是一个更可怕的权限警告,你必须向你的用户解释它。
来源:https://stackoverflow.com/a/16187588/6250024
我也想知道同样的问题,并发现了一个更好的解决方案,它引入了"include_globs"参数。
"matches": ["http://*/*", "https://*/*"],
"include_globs": ["http://www.google.*/*", "https://www.google.*/*"],
您可以使用任意长度的匹配模式数组(尽管当使用超过1000个左右时它会减慢浏览器的速度)。为了您的方便,这里是一个更新的列表:
"matches": [
"*://*.google.com/*",
"*://*.google.ad/*",
"*://*.google.ae/*",
"*://*.google.com.af/*",
"*://*.google.com.ag/*",
"*://*.google.com.ai/*",
"*://*.google.al/*",
"*://*.google.am/*",
"*://*.google.co.ao/*",
"*://*.google.com.ar/*",
"*://*.google.as/*",
"*://*.google.at/*",
"*://*.google.com.au/*",
"*://*.google.az/*",
"*://*.google.ba/*",
"*://*.google.com.bd/*",
"*://*.google.be/*",
"*://*.google.bf/*",
"*://*.google.bg/*",
"*://*.google.com.bh/*",
"*://*.google.bi/*",
"*://*.google.bj/*",
"*://*.google.com.bn/*",
"*://*.google.com.bo/*",
"*://*.google.com.br/*",
"*://*.google.bs/*",
"*://*.google.bt/*",
"*://*.google.co.bw/*",
"*://*.google.by/*",
"*://*.google.com.bz/*",
"*://*.google.ca/*",
"*://*.google.cd/*",
"*://*.google.cf/*",
"*://*.google.cg/*",
"*://*.google.ch/*",
"*://*.google.ci/*",
"*://*.google.co.ck/*",
"*://*.google.cl/*",
"*://*.google.cm/*",
"*://*.google.cn/*",
"*://*.google.com.co/*",
"*://*.google.co.cr/*",
"*://*.google.com.cu/*",
"*://*.google.cv/*",
"*://*.google.com.cy/*",
"*://*.google.cz/*",
"*://*.google.de/*",
"*://*.google.dj/*",
"*://*.google.dk/*",
"*://*.google.dm/*",
"*://*.google.com.do/*",
"*://*.google.dz/*",
"*://*.google.com.ec/*",
"*://*.google.ee/*",
"*://*.google.com.eg/*",
"*://*.google.es/*",
"*://*.google.com.et/*",
"*://*.google.fi/*",
"*://*.google.com.fj/*",
"*://*.google.fm/*",
"*://*.google.fr/*",
"*://*.google.ga/*",
"*://*.google.ge/*",
"*://*.google.gg/*",
"*://*.google.com.gh/*",
"*://*.google.com.gi/*",
"*://*.google.gl/*",
"*://*.google.gm/*",
"*://*.google.gp/*",
"*://*.google.gr/*",
"*://*.google.com.gt/*",
"*://*.google.gy/*",
"*://*.google.com.hk/*",
"*://*.google.hn/*",
"*://*.google.hr/*",
"*://*.google.ht/*",
"*://*.google.hu/*",
"*://*.google.co.id/*",
"*://*.google.ie/*",
"*://*.google.co.il/*",
"*://*.google.im/*",
"*://*.google.co.in/*",
"*://*.google.iq/*",
"*://*.google.is/*",
"*://*.google.it/*",
"*://*.google.je/*",
"*://*.google.com.jm/*",
"*://*.google.jo/*",
"*://*.google.co.jp/*",
"*://*.google.co.ke/*",
"*://*.google.com.kh/*",
"*://*.google.ki/*",
"*://*.google.kg/*",
"*://*.google.co.kr/*",
"*://*.google.com.kw/*",
"*://*.google.kz/*",
"*://*.google.la/*",
"*://*.google.com.lb/*",
"*://*.google.li/*",
"*://*.google.lk/*",
"*://*.google.co.ls/*",
"*://*.google.lt/*",
"*://*.google.lu/*",
"*://*.google.lv/*",
"*://*.google.com.ly/*",
"*://*.google.co.ma/*",
"*://*.google.md/*",
"*://*.google.me/*",
"*://*.google.mg/*",
"*://*.google.mk/*",
"*://*.google.ml/*",
"*://*.google.com.mm/*",
"*://*.google.mn/*",
"*://*.google.ms/*",
"*://*.google.com.mt/*",
"*://*.google.mu/*",
"*://*.google.mv/*",
"*://*.google.mw/*",
"*://*.google.com.mx/*",
"*://*.google.com.my/*",
"*://*.google.co.mz/*",
"*://*.google.com.na/*",
"*://*.google.com.nf/*",
"*://*.google.com.ng/*",
"*://*.google.com.ni/*",
"*://*.google.ne/*",
"*://*.google.nl/*",
"*://*.google.no/*",
"*://*.google.com.np/*",
"*://*.google.nr/*",
"*://*.google.nu/*",
"*://*.google.co.nz/*",
"*://*.google.com.om/*",
"*://*.google.com.pa/*",
"*://*.google.com.pe/*",
"*://*.google.com.pg/*",
"*://*.google.com.ph/*",
"*://*.google.com.pk/*",
"*://*.google.pl/*",
"*://*.google.pn/*",
"*://*.google.com.pr/*",
"*://*.google.ps/*",
"*://*.google.pt/*",
"*://*.google.com.py/*",
"*://*.google.com.qa/*",
"*://*.google.ro/*",
"*://*.google.ru/*",
"*://*.google.rw/*",
"*://*.google.com.sa/*",
"*://*.google.com.sb/*",
"*://*.google.sc/*",
"*://*.google.se/*",
"*://*.google.com.sg/*",
"*://*.google.sh/*",
"*://*.google.si/*",
"*://*.google.sk/*",
"*://*.google.com.sl/*",
"*://*.google.sn/*",
"*://*.google.so/*",
"*://*.google.sm/*",
"*://*.google.sr/*",
"*://*.google.st/*",
"*://*.google.com.sv/*",
"*://*.google.td/*",
"*://*.google.tg/*",
"*://*.google.co.th/*",
"*://*.google.com.tj/*",
"*://*.google.tk/*",
"*://*.google.tl/*",
"*://*.google.tm/*",
"*://*.google.tn/*",
"*://*.google.to/*",
"*://*.google.com.tr/*",
"*://*.google.tt/*",
"*://*.google.com.tw/*",
"*://*.google.co.tz/*",
"*://*.google.com.ua/*",
"*://*.google.co.ug/*",
"*://*.google.co.uk/*",
"*://*.google.com.uy/*",
"*://*.google.co.uz/*",
"*://*.google.com.vc/*",
"*://*.google.co.ve/*",
"*://*.google.vg/*",
"*://*.google.co.vi/*",
"*://*.google.com.vn/*",
"*://*.google.vu/*",
"*://*.google.ws/*",
"*://*.google.rs/*",
"*://*.google.co.za/*",
"*://*.google.co.zm/*",
"*://*.google.co.zw/*",
"*://*.google.cat/*"
],
要重新创建,您可以使用命令
curl https://www.google.com/supported_domains | sed 's!(.*)!"*://*1/*",!g'