所有 Google 搜索页面的匹配模式

DMC*_*ing 5 javascript google-chrome-extension opera-extension

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

  • 任何协议 ( '*://')
  • 任何子域或无子域 ('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"]
);
Run Code Online (Sandbox Code Playgroud)

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

Xan*_*Xan 5

遗憾的是,出于安全原因,匹配模式不允许 TLD 使用通配符

您不能使用通配符匹配模式http://google.*/*来匹配 TLD(如http://google.eshttp://google.fr),因为实际上将此类匹配限制为仅所需的域非常复杂。

对于 的示例http://google.*/*,Google 域将被匹配,但http://google.someotherdomain.com. 此外,许多网站并不拥有其域的所有 TLD。例如,假设您要使用http://example.*/*来匹配 http://example.comhttp://example.es,但http://example.net它是一个敌对站点。如果您的扩展程序存在错误,则敌对站点可能会攻击您的扩展程序,以获得对您的扩展程序增加的权限的访问权限。

您应该明确枚举您希望运行扩展程序的 TLD。

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

编辑:感谢rsanchez的非常有用的评论,这里是所有 Google 域变体的最新列表,这使得这种方法可行。

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