2010-03-24 57 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

相關問題