【问题标题】:Why is $ undefined when I try to use jQuery in GreaseMonkey?为什么当我尝试在 GreaseMonkey 中使用 jQuery 时 $ 未定义?
【发布时间】:2016-01-20 01:55:55
【问题描述】:

我对 GreaseMonkey 完全陌生,但我正在尝试制作一个小脚本。

// ==UserScript==
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// ==/UserScript==
(function() {
    $ = unsafeWindow.jQuery;
    alert($); // this gives 'undefined'
}());

为什么警报会给出undefined 以及如何解决这个问题?

更新

我试过了:

(function(){
  //boilerplate greasemonkey to wait until jQuery is defined...
  function GM_wait()
  {
    alert('ok');
    if(typeof unsafeWindow.jQuery == 'undefined')
      window.setTimeout(GM_wait,100);
    else
      unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
  }
  GM_wait();

  function letsJQuery($)
  {
    alert($);
  }
})(); 

但这给了我一个无限循环的 ok-alerts。好像 jQuery 根本没有加载。

【问题讨论】:

标签: jquery greasemonkey


【解决方案1】:

编辑:会不会是this

也许您没有足够新的 Greasemonkey 版本。 0.8 版添加了@require。另外,请记住 @require 仅在首次安装脚本时处理。如果您更改了所需脚本列表,则需要将其卸载并重新安装; Greasemonkey 在安装时下载一次所需的脚本,然后使用缓存的副本。


GM 脚本可以在页面准备好之前执行(即在 jQuery 初始化之前)。为了使用 jQuery,我在 Greasemonkey 脚本中使用了这段代码:

(function(){
  //boilerplate greasemonkey to wait until jQuery is defined...
  function GM_wait()
  {
    if(typeof unsafeWindow.jQuery == 'undefined')
      window.setTimeout(GM_wait,100);
    else
      unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
  }
  GM_wait();

  function letsJQuery($)
  {
    //whatever
  }
})();

【讨论】:

  • 我也发现了这个结构,但这是在greasemonkey 能够使用@require 之前,如果我理解正确的话。我试试看。
  • @Natrium:我没有注意到@require。我以前没用过,但它只是jQuery,而不是unsafewindow.jQuery?如果您使用的是@require,我认为在脚本中定义了它(而不是在unsafeWindow
  • 看起来 @require 并没有那么好用。现在我使用了很好的旧方法:joanpiedra.com/jquery/greasemonkey 这就像一个魅力。谢谢!
【解决方案2】:

@require 用于执行一次性资源下载。
首次安装时,会下载资源并将其放置在脚本的文件夹中。 然后在用户脚本之前执行所需的脚本。
它与用户脚本在相同的范围内运行,而不是在unsafeWindow
如果您自己编写脚本,那么在您实际安装它之前它不会获取资源(或编辑 GM xml 文件以识别资源并将文件植入脚本的目录中,在 firefox 的用户配置文件目录中)。

如果您选择(更简单的)卸载\重新安装方法,请不要忘记备份您的用户脚本... :)

【讨论】:

    【解决方案3】:

    较新的greasemonkey需要添加// @grant none才能使用// @require

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 2020-11-01
      • 2021-05-26
      • 2023-01-23
      • 2019-05-20
      • 2020-01-15
      • 2021-04-03
      • 2014-04-01
      相关资源
      最近更新 更多