2009-10-12 8 views
5

Angenommen, Sie möchten ein Skript Greasemonkey, das mit Safari und Chrome kompatibel ist.Greasemonkey-Skriptkompatibilität mit Firefox, Safari, Opera und chrome (onload-Ereignis)

Während in Firefox die Greasemonkey-Skripte nur ausgeführt werden, wenn das DOM bereit ist. Chrome, Safari und Opera scheinen die Greasemonkey-Skripts auszuführen, bevor das DOM bereit ist.

Also was ich suche ist eine Lösung, die nur einen Listener auf der Seite laufen lassen wird, warten auf das Ereignis DOM geladen/bereit, und bei Erhalt dieses Ereignisses, dann den Rest des Skripts ausführen. Wenn der verwendete Browser Chrome, Safari oder Opera ist. Wenn sie Firefox verwenden, führen Sie einfach das Skript aus und kümmern sich nicht um den Ereignis-Listener.

Wie wird das codiert?

@NV

Dank NV, wissen Sie, ob das Skript auch Google Chrome kompatibel ist?

Wird der Code

(function(){ 

    // Code here run after 'load' event in all browsers. 

})(); 

auch auf DOM bereit in Google Chrome laufen?

Antwort

-1

Ich nehme an, Sie könnten sehen, wie JavaScript-Bibliotheken wie JQuery dies abziehen. Es wäre wahrscheinlich zu schwer, tatsächlich eines zu verwenden, aber sie haben dieses Problem bereits gelöst.

1

Schauen Sie sich zunächst UserJS an. Es funktioniert auf Greasemonkey, Opera und Safari Greasekit.

Wenn Sie nach dem Laden der Seite Code ausführen möchten, sind Ereignislistener überhaupt nicht erforderlich.

... Safari + Opera, scheinen die gm-Skripte zu laufen, bevor das Dom bereit ist.

Nein. Eigentlich ist es komplizierter. Opera hat greasemokey compatible mode. Alle Skripts mit dem Namen yada-yada .user .js werden im kompatiblen Modus ausgeführt und führen aus, nachdem DOM bereit ist.

HINWEIS: Umgehen Sie Ihren Code in eine anonyme Funktion, um ein Eindringen von Variablen in ein globales Fensterobjekt zu verhindern (dies geschieht in Opera).

(function(){ 

    // Some code 

})(); 

Safari Greasekit funktioniert in diesem Fall wie Firefox Greasemonkey.

+2

Durch einfaches Umbrechen von Code in einer anonymen Funktion wird die Ausführung erst nach dem Ladeereignis verzögert. Der erste Teil der obigen Antwort ist somit falsch und irreführend. – hallvors

+0

hallvors, du hast Recht! Vielleicht spreche ich nicht klar. Ich habe die Antwort aktualisiert. – NVI

+0

Ich markierte Antwort als Community-Wiki. Also, Sie können bearbeiten. – NVI

0

ich die minimierte jQuery nahm und kopieren Sie sie in mein userscript klebte, und tat dann das klassische

$(document).ready(function() { 
     // Put all your jQuery goodness in here. 
    }); 

, die den zusätzlichen Bonus geben Sie jQuery, die alle in der in einer anderen Frage erwähnten Funktion eingeschlossen hat:

(function(){ 

    // Some code. 

})(); 

Sie konnten die Grease Sachen verwenden jQuery via URL an der Spitze zu importieren, aber das ist Grease spezifisch, Chrome/Opera, etc. werden nicht kompatibel sein, wenn Sie es auf diese Weise tun.