如何在用户脚本中@match URL 散列?

How to @match a URL hash in a userscript?

我在一个网站上打开了很多标签页 - 我想将其限制为只有一个 URL。

问题是 URL 中有 # 而我似乎无法 @match 它。

URL 看起来像:https://xxx.xxxxxx.xxx/#/xxxxxx

我试过了:

// @match https://xxx.xxxxxx.xxx/#/xxxxxx - doesnt work

// @match https://xxx.xxxxxx.xxx/* - works - but works on all tabs

// @match https://xxx.xxxxxx.xxx/*/xxxxxx -doesnt work;/

// @match https://xxx.xxxxxx.xxx/\#/xxxxxx -doesnt work;/

* 及其后的任何组合均无效。 :(

此问题与以下问题密切相关:Greasemonkey/Tampermonkey @match for a page with parameters

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

要触发哈希值(正式 called the "fragment"),您可以 使用 @includenote-1 或使用 @match 并自己测试 URL。

所以使用如下代码:

...
// @match    *://YOUR_SERVER.COM/YOUR_PATH/
// ==/UserScript==

if ( ! /#unicorn.*/.test(location.hash) )  return;

// REST OF YOUR CODE HERE.

对于这个例子,那个代码:

  • 运行 :https://YOUR_SERVER.COM/YOUR_PATH/#unicorn
  • 运行 :https://YOUR_SERVER.COM/YOUR_PATH/#unicorn-mode,等等
  • 忽略:https://YOUR_SERVER.COM/YOUR_PATH/#unicom
  • 忽略:https://YOUR_SERVER.COM/YOUR_PATH/?foo=bar#unicorn(如果需要,在 @match 末尾添加 *。)

重要提示:这 仅用于初始页面加载。 hash 可以在页面加载后更改,处理起来更复杂并且未在此中指定问题。
所以,对于那种情况,开一个新问题并参考这个。




备注:

  1. 不幸的是,Tampermonkey 尚未像 Greasemonkey 那样实现 @include,因此即使在 @includeseems likely to remain that way for the near future 中 fragment/hash 也会被忽略。