2010-03-24 59 views
6

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

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

为什么警报提示undefined以及如何解决该问题?

UPDATE

我尝试这样做:

(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根本没有加载。

+0

尝试这些相关的问题: http://stackoverflow.com/questions/2077714/greasemonkey-require-jquery-not-working-component-not-available http://stackoverflow.com/questions/859024/how-can-i-use-jquery-in -greasemonkey – Kip 2010-03-24 13:14:51

回答

4

编辑:难道是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 
    } 
})(); 
+0

我也发现了这个建议,但是这之前greasemonkey能够使用@require,如果我理解正确的话。我会试一试。 – Natrium 2010-03-24 13:06:40

+0

@Natrium:我没有注意到@ @ require'。我以前没有用过,但是它只是'jQuery',而不是'unsafewindow.jQuery'?如果你使用'@ require',我认为在脚本中定义了它(而不是'unsafeWindow') – Kip 2010-03-24 13:11:36

+0

看起来@require不起作用。现在我用了一个很好的旧方法:http://joanpiedra.com/jquery/greasemonkey/ 这个工程就像一个魅力。谢谢! – Natrium 2010-03-24 13:25:53

1

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

如果您选择(简单)卸载\重新安装方法,不要忘记备份你的userscript ... :)

0

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

相关问题