代码之家  ›  专栏  ›  技术社区  ›  Natrium

为什么在greasemonkey中尝试使用jquery时$undefined?

  •  7
  • Natrium  · 技术社区  · 15 年前

    我对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警报。似乎jquery根本没有加载。

    3 回复  |  直到 9 年前
        1
  •  5
  •   Community CDub    8 年前

    编辑 :可能是 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
      }
    })();
    
        2
  •  1
  •   MasterAM    15 年前

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

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

        3
  •  1
  •   uingtea    9 年前

    需要添加新的Greasemonkey // @grant none 使用 // @require