【问题标题】:Greasemonkey/ Tampermonkey @match for a page with parametersGreasemonkey/ Tampermonkey @match 用于带有参数的页面
【发布时间】:2013-12-26 02:03:02
【问题描述】:

我正在编写一个必须在特定页面中执行的脚本,具体取决于它具有的参数。网址是这样的:

http://example.com/page.php?key1=value1&key2=value2&...

page.php 的参数中有key1=value1 时,我需要匹配它。

现在我正在使用

@match http://example.com/page.php?key1=value1&*

但如果page.php 没有其他参数则不匹配。如果key1 也不是第一个参数,它也不匹配。

有没有办法根据参数匹配页面?

【问题讨论】:

    标签: javascript regex greasemonkey tampermonkey userscripts


    【解决方案1】:

    @match only works on the protocol/scheme, host, and pathname of a URL.

    要触发查询参数,您可以使用@include@match 并自行测试网址。
    请注意,@match 方法的执行速度更快。

    使用@include,您可以使用正则表达式语法。另请参阅Include and exclude rules

    在这种情况下,请使用 任一:

    ...
    // @include  /^https?://example\.com/page\.php*key1=value1*/
    // ==/UserScript==
    

    **要么:**
    ...
    // @match *://example.com/page.php*
    // ==/UserScript==
    
    if (/\bkey1=value1\b/.test (location.search) ) {
        // DO YOUR STUFF HERE.
    }
    

    【讨论】:

    • 这行得通,除了几件事。我使用了@match 示例,因为@include 不起作用(不过我会继续尝试)。另外,我必须做这场比赛才能让它发挥作用:@match http://example.com/page.php*
    • 在最新版本中,@match 匹配整个 URI,包括查询字符串。例如,@match https://www.example.com 将不匹配 https://www.example.com?foo=bar
    • 我的 TamperMonkey 脚本中的多个匹配语句可能适用于列出的第一个站点,但不适用于其他站点。我去使用带有正则表达式的include,确保不要忘记分隔符,看来我不能使用我自定义的常用分隔符。
    • 第二个例子(使用@match)对我有用!如果将 * 放在任何查询字符串之前,只需将 * 附加到 URL 路径即可。
    • 示例 匹配 http&https 上的任何 Google 子域 ...@include /^https?\:\/\/.*.google\..*\/.*$/ - 可能会帮助其他人疯狂地尝试使其像我一样工作(另外,不要忘记检查“✅Enabled”)。
    【解决方案2】:

    根据@match 的文档,Greasemonkey 引擎似乎不会匹配查询字符串参数:

    https://developer.chrome.com/extensions/match_patterns.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-25
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 2018-01-16
      • 2020-06-27
      相关资源
      最近更新 更多