Javascript 所有谷歌搜索页面的匹配模式

Javascript 所有谷歌搜索页面的匹配模式,javascript,google-chrome-extension,opera-extension,Javascript,Google Chrome Extension,Opera Extension,我正在开发一个扩展,它将在所有谷歌搜索URL上执行特定操作,但不会在其他网站或谷歌页面上执行。在自然语言中,匹配模式为: 任何协议(“*:/”) 任何子域或无('www'或') 域字符串必须等于'google' 任何TLD,包括三个字母的TLD(例如'.com')和多部分国家TLD(例如'.co.uk') 路径的前8个字母必须等于'/search?' 许多人说“要匹配所有谷歌搜索页面,请使用”*://*.google.com/search?*“,但这显然是不真实的,因为它不会匹配像googl

我正在开发一个扩展,它将在所有谷歌搜索URL上执行特定操作,但不会在其他网站或谷歌页面上执行。在自然语言中,匹配模式为:

  • 任何协议(
    “*:/”
  • 任何子域或无(
    'www'
    '
  • 域字符串必须等于
    'google'
  • 任何TLD,包括三个字母的TLD(例如
    '.com'
    )和多部分国家TLD(例如
    '.co.uk'
  • 路径的前8个字母必须等于
    '/search?'
许多人说“要匹配所有谷歌搜索页面,请使用
”*://*.google.com/search?*“
,但这显然是不真实的,因为它不会匹配像google.co.uk这样的国家TLD

因此,以下代码根本不起作用:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    alert('This never happens');
  }, {
    urls: [
        "*://*.google.*/search?*",
        "*://google.*/search?*",
    ],
    types: ["main_frame"]
  },
  ["blocking"]
);

使用
“*://*.google.com/search?*”
作为匹配模式确实有效,但我担心我需要一个列出每一个谷歌本地化的列表才能成为一个有效的策略。

不幸的是,匹配模式

不能使用通配符匹配模式,如
http://google.*/*
匹配 TLD(如
http://google.es
http://google.fr
)由于 实际上将此类匹配限制为仅所需匹配的复杂性 域名

例如
http://google.*/*
,谷歌域名将是 匹配,但
http://google.someotherdomain.com
。另外,, 许多站点并不拥有其域的所有TLD。为了 例如,假设您想使用
http://example.*/*
匹配
http://example.com
http://example.es
,但
http://example.net
是一个 敌对地点。如果您的分机有bug,恶意站点可能会 可能攻击您的扩展以访问您的 扩展的特权增加了

您应该显式枚举要运行的TLD 请接分机

一个稍微不切实际的选择是列出所有国家TLD的所有变体

编辑:多亏了作者的一条非常有用的评论,下面是所有谷歌域名变体的一个例子,使这种方法可行

一个现实的选择是注入一组更大的页面(例如,所有页面),然后分析URL(例如,使用regexp)并仅在它与您正在寻找的模式匹配时执行。是的,这将是一个更可怕的权限警告,您必须向用户解释它。

来源:

我也在想同样的问题,发现同样的问题有一个更好的解决方案,它引入了“include_globs”参数

"matches":        ["http://*/*", "https://*/*"],
"include_globs":  ["http://www.google.*/*", "https://www.google.*/*"],

您可以使用任意长度的匹配阵列(尽管使用超过1000个阵列时会减慢浏览器的速度)。为方便起见,以下是最新列表:

“匹配项”:[
“*://*.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/*”,
“*:/*。谷歌。