2009-10-12 9 views
5

Supposons que vous vouliez qu'un script Greasemonkey soit compatible avec Safari et Chrome. Alors que dans Firefox, les scripts Greasemonkey ne s'exécutent que lorsque le DOM est prêt. Chrome, Safari et Opera semblent exécuter les scripts Greasemonkey avant que le DOM ne soit prêt. Donc, ce que je cherche est une solution qui n'exécutera qu'un écouteur sur la page, en attente de l'événement DOM chargé/prêt, et à la réception de cet événement, alors exécutez le reste du script. Si le navigateur qu'ils utilisent est Chrome, Safari ou Opera. S'ils utilisent Firefox, exécutez le script immédiatement et ne vous embêtez pas avec l'écouteur d'événement.Compatibilité du script Greasemonkey avec Firefox, Safari, Opera et chrome (événement onload)

Comment coder cela?

@NV

Merci NV, savez-vous si ce script est également compatible Google Chrome?

Est-ce que le code

(function(){ 

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

})(); 

fonctionner aussi sur DOM prêt dans Google Chrome?

Répondre

-1

Je suppose que vous pourriez regarder comment les bibliothèques JavaScript comme JQuery s'en tirent. Il serait probablement trop lourd pour en utiliser un, mais ils ont déjà résolu ce problème.

1

Tout d'abord, jetez un oeil à UserJS. Cela fonctionne sur Greasemonkey, Opera, et Safari Greasekit.

Si vous souhaitez exécuter du code après le chargement de la page, les écouteurs d'événement ne sont pas nécessaires du tout.

... safari + opera, semble exécuter les scripts gm avant que le dom soit prêt.

Non. En fait, c'est plus compliqué. Opera a greasemokey compatible mode. Tous les scripts nommés yada-yada .user .js s'exécutent en mode compatible, et exécutent après DOM est prêt. REMARQUE: enroulez votre code dans une fonction anonyme pour empêcher toute fuite de variable dans l'objet fenêtre global (cela se produit dans Opera).

(function(){ 

    // Some code 

})(); 

Safari Greasekit fonctionne comme Firefox Greasemonkey dans ce cas.

+2

Le simple fait d'encapsuler du code dans une fonction anonyme ne retarde PAS l'exécution avant l'événement de chargement. La première partie de la réponse ci-dessus est donc fausse et trompeuse. – hallvors

+0

hallvors, vous avez raison! Peut-être que je ne parle pas clairement. J'ai mis à jour la réponse. – NVI

+0

J'ai marqué la réponse comme wiki de la communauté. Donc, vous pouvez éditer. – NVI

0

Je pris la minified jQuery et copier collé dans mon userscript, puis a fait le

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

classique qui a l'avantage supplémentaire de vous donner jQuery, le tout intégré dans la fonction mentionnée dans une autre question:

(function(){ 

    // Some code. 

})(); 

vous pouvez utiliser les trucs Greasemonkey pour importer jQuery via l'URL en haut, mais cela est spécifique Greasemonkey, Chrome/Opera, etc. ne seront pas compatibles si vous le faites de cette façon.

Questions connexes