【问题标题】:TamperMonkey namespacing will not scope to top level domainTamperMonkey 命名空间不会作用于顶级域
【发布时间】:2015-09-12 16:06:54
【问题描述】:

我想在所有 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,我可以:

  • 将所有 TamperMonkey 代码应用于所有网站
  • 不对所有网站应用 TamperMonkey 代码
  • 按下扩展时出现 TamperMonkey 脚本
    • 保持绿色
    • 成为红色
  • 按下扩展时不显示 TamperMonkey 脚本

最后一个选项更奇怪,使用 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==

解决方案需要几个步骤,这些步骤已添加到底部的原始帖子中,以便其他人也可以学习。感谢您的帮助。

删除@namespace 添加两者:

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

【问题讨论】:

  • 我不认为namespace 做任何事情,它更多的是为了元而不是执行。
  • 仅供参考,我一直在阅读这篇文章和许多 SO 帖子以寻求想法:tampermonkey.net/documentation.php
  • 到目前为止,所有匹配项保存下面的匹配项使脚本甚至不出现 // @match / 它只匹配所有 url
  • 您需要向我们展示整个用户脚本文件,以便我们自己尝试。

标签: javascript youtube tampermonkey


【解决方案1】:

注意:

  1. 在 Tampermonkey 中指定站点的最佳方式是使用 the @match directive。 (或使用@include 获得更多选项,但性能和“安全性”较低。)

  2. YouTube 几乎总是使用www. 子域,所以像
    // @match https://youtube.com/*
    这样的指令 几乎永远不会匹配。

  3. 有时,http:// 仍然有效。

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

因此,您需要与以下 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!");

【讨论】:

  • 谢谢您,您的脚本确实有效,但它不能解决 GM_addStyle 的问题。
  • GM_addStyle 什么问题?哦,我看到你在几分钟前改变了问题!这是不可接受的,并且与最初提出的问题无关。解决原始问题后,为单独的问题打开一个新问题。 (在这种情况下,GM_addStyle("body { color: grey !important; }"); 可能足以解决其他问题。
  • 我改标题不是问题
  • 你改变了两者,只是不同时。
  • 很公平,这不是故意的。该解决方案需要几个步骤,这些步骤已添加到底部的原始帖子中,以便其他人也可以学习。感谢您的帮助。
【解决方案2】:

改变

// @namespace    https://youtube.com

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

【讨论】:

  • 我很欣赏这个尝试,但我自己已经尝试过了。
  • 无赖,以为是问题所在
  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2018-10-10
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多