当我尝试在GreaseMonkey中使用jQuery时为什么$ undefined?

时间:2010-03-24 13:02:04

标签: jquery greasemonkey

我对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-alert。似乎jQuery根本没有加载。

3 个答案:

答案 0 :(得分:5)

修改:可能是this吗?

  

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


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

(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
  }
})();

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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