2009-08-09 10 views
1

Ich schreibe ein einfaches GreaseMonkey-Skript, in das ein jQuery-Plugin namens HoverIntent eingebettet ist. (Ich bin es einbetten, anstatt es zu hosten, weil es ein sehr kleines Plugin ist.)jQuery-Plugins in Greasemonkey-Skripten verwenden

Mein Problem: nachdem das Plugin seinen Event-Handler an ein DOM-Objekt anfügt, löst das Ereignis eine Fehlermeldung aus, die besagt: "jQuery ist nicht definiert . "

Ist es ein Problem mit dem Oszilloskop? Hier ist meine gesamte Skript:

if(unsafeWindow.console){ 
     var GM_log = unsafeWindow.console.log; 
    } 


    (function($){ 
      //HoverIntent 
      $.fn.hoverIntent=function(f,g){...}; 
      //Removed the plugin code. You can see it in the link at the bottom 
      //of the post. 



    //DOM is ready 
    //Fetch all the rows with arrows 
    $('.arrow') 
     .each(function(){ 
      $(this).hoverIntent(mouseOver,mouseOut);    
     }); 

    //mouseOver 
    function mouseOver(){ 
     //THIS IS WHERE THE ERROR HAPPENS 
     $(this).click(); 
    } 

    //mouseOut 
    function mouseOut(){ //nothing here. 
    } 

    })(unsafeWindow.jQuery); 

Es funktioniert gut, wenn ich es kopieren und einfügen, entfernen Sie alle spezifischen Tags GM, und führen Sie es aus meiner Konsole. Und this is the plugin I am embedding.

Antwort

1

Führt das Skript "weastmonkey" vor oder nach onDOMLoaded? Sie müssen möglicherweise die Ausführung des Skripts verzögern, bis nach dem jQuery-Skript durch das übergeordnete Fenster bezogen ist und geladen ...

bearbeiten pro Kommentar:

Ich sehe nicht das document.ready Bit in

(function($){ /* some code here */ })(unsafeWindow.jQuery) 

Unabhängig davon, was Sie setzen in: Ihr Code oben, obwohl ich Ihre Kommentare über sie zu sehen ... aber Ihr Kommentar ist ein bisschen zu spät im Skript nutzen zu sein ... Dies könnte erklären, Im Abschnitt wird, wenn diese Zeile ausgeführt wird, bevor unsafeWindow.jQuery definiert ist, immer noch eine Funktion für ein undefiniertes Objekt aufgerufen t ...

die GreaseSpot wiki on unsafeWindow Lesen, schlägt er den alternativen Ansatz von:

var script = document.createElement("script"); 
script.type = "application/javascript"; 
script.innerHTML = "(function($){ 
     //HoverIntent 
     $.fn.hoverIntent=function(f,g){...}; 
     //Removed the plugin code. You can see it in the link at the bottom 
     //of the post. 



    //DOM is ready 
    //Fetch all the rows with arrows 
    $('.arrow') 
     .each(function(){ 
       $(this).hoverIntent(mouseOver,mouseOut);     
     }); 

    //mouseOver 
    function mouseOver(){ 
     //THIS IS WHERE THE ERROR HAPPENS 
     $(this).click(); 
    } 

    //mouseOut 
    function mouseOut(){ //nothing here. 
    } 

})(jQuery);"; 

document.body.appendChild(script); 

Edit: keine meiner Antworten unbedingt Sinn machen, obwohl, da Sie mit dem $ Objekt für ein paar Zeilen bevor die Ausgabe sich präsentiert ..: -S komisch.

+0

Gute Frage. Mein Verständnis ist, dass Userscripts geladen werden, nachdem das DOM geladen wurde, aber nur um auf der sicheren Seite zu sein, habe ich ein Dokument in meinem Skript verwendet, wie Sie oben sehen können. – picardo