如何@match 用户脚本中的 URL 哈希?

Krz*_*tof 6 url greasemonkey match userscripts tampermonkey

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

问题是 URL 包含#在其中,我似乎无法 @match 它。

该网址如下所示: 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;/
Run Code Online (Sandbox Code Playgroud)

* 和后面的任何组合都不起作用。:(

Bro*_*ams 5

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

@match 仅适用于 URL 的协议/方案、主机和路径名。

触发散列值(官方称为“片段”),您可以@includenote-1或使用@match并自己测试 URL。

所以使用如下代码:

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

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

// REST OF YOUR CODE HERE.
Run Code Online (Sandbox Code Playgroud)

对于此示例,该代码:

  • 运行: 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 还没有@include像 Greasemonkey 那样实现,所以片段/散列即使在 中@include也被忽略,并且在不久的将来似乎可能保持这种方式