TamperMonkey 命名空间不会作用于顶级域

TamperMonkey namespacing will not scope to top level domain

我想 运行 在所有 YouTube.com 网站上独家使用此 TamperMonkey 脚本:

// ==UserScript==
// @name         YouTubeFakeScriptName
// @version      0.3
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant        GM_addStyle
// ==/UserScript==

// Insert any JavaScript here.

这就是问题所在,它不仅限于 YouTube。 我尝试了很多选择:

// @namespace    http://youtube.com
// @namespace    https://youtube.com
// @namespace    https://youtube.com/
// @namespace    https://youtube.com/*
// @namespace    youtube.com
// @namespace    *
// @namespace    */youtube.com/*   

与@include 类似,这是它在 http://tampermonkey.net/documentation.php 上所说的内容 该脚本的页面应该运行。允许多个标记实例。 请注意 @include 不支持 URL 哈希参数。请访问此论坛主题以获取更多信息:单击。 代码:

// @include http://tampermonkey.net/*
// @include http://*
// @include https://*
// @include *

除了许多其他可能性,但我似乎无法将范围仅适用于 YouTube,我可以:

最后一个选项更奇怪,使用 match 有奇怪的行为;如果我使用以下任一方法,我什至无法让我的脚本在单击扩展按钮时出现:

// @match        https://youtube.com/*
// @match        *

但如果我根本不使用@match 或使用:

,脚本就会出现
// @match        */*

附加:我可以确认使用以下内容在单击 Tampermonkey 时不会在扩展程序中生成任何脚本:

// ==UserScript==
// @name         YouTubeRandomAppHere
// @match        https://youtube.com/*
// @version      0.3
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant        GM_addStyle
// ==/UserScript==

解决方案需要几个步骤,在底部添加到原始post,以便其他人也可以学习。谢谢你的帮助。

删除@namespace 同时添加:

// @match       *://*.youtube.com/*
// @noframes

改变

// @namespace    https://youtube.com

// @match        https://youtube.com/*

注:

  1. 在 Tampermonkey 中指定站点的最佳方式是使用 the @match directive。 (或者使用 @include 以获得更多选项但性能较低,并且使用 "safety"。)

  2. YouTube 几乎总是使用 www. 子域,因此指令如
    // @match https://youtube.com/*
    几乎永远不会匹配。

  3. 偶尔,http://仍然有效。

  4. 根据您的描述,您可能不希望脚本在 iframed 或嵌入式内容上运行。

因此您需要符合以下 URL 模式并排除其他所有内容的指令:

https://www.youtube.com/*
http://www.youtube.com/*
https://youtube.com/*
http://youtube.com/*

参见the Match Patterns documentation。执行所有操作的模式是:

// @match  *://*.youtube.com/*

综合起来:

// ==UserScript==
// @name        YouTubeRandomAppHere
// @match       *://*.youtube.com/*
// @version     0.3
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant       GM_addStyle
// @noframes
// ==/UserScript==

alert ("Hello World!");