2009-10-12 13 views
5

dijo que quería un guión Greasemonkey para que sea compatible con Safari y Chrome.compatibilidad script de Greasemonkey con Firefox, Safari, Opera y Chrome (proceso de carga)

Mientras que en Firefox los scripts de Greasemonkey solo se ejecutan cuando el DOM está listo. Chrome, Safari y Opera parecen ejecutar las secuencias de comandos de Greasemonkey antes de que DOM esté listo.

Así que lo que estoy buscando es una solución que solo ejecutará un oyente en la página, esperando el evento DOM cargado/listo, y al recibir ese evento, luego ejecutará el resto del script. Si el navegador que están utilizando es Chrome, Safari u Opera. Si están usando Firefox, simplemente ejecute el script de inmediato y no se moleste con el oyente del evento.

¿Cómo codificar esto?

@NV

Gracias NV, se puede saber si ese guión también es compatible Google Chrome?

¿El código

(function(){ 

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

})(); 

también funcionar en DOM listo en Google Chrome?

Respuesta

-1

Supongo que puede ver cómo las bibliotecas de JavaScript como JQuery lo hacen. Probablemente sería demasiado pesado para usar uno, pero ciertamente ya han resuelto este problema.

1

En primer lugar, echar un vistazo a UserJS. Funciona en Greasemonkey, Opera y Safari Greasekit.

Si desea ejecutar algún código después de carga de la página, los detectores de eventos no es necesario en absoluto.

... safari + opera, parecen ejecutar los scripts gm antes de que el dom esté listo.

No. En realidad, es más complicado. Opera tiene greasemokey compatible mode. Todos los scripts llamados yada-yada .user .js se ejecutan en modo compatible y ejecutan después de DOM está listo.

NOTA: envolver su código en función anónima para evitar la fuga de variables en objeto de la ventana mundial (esto ocurre en Opera).

(function(){ 

    // Some code 

})(); 

Safari Greasekit funciona como Firefox Greasemonkey en este caso.

+2

Simplemente envolviendo el código en una función anónima NO retrasa la ejecución hasta después del evento de carga. La primera parte de la respuesta anterior es errónea y engañosa. – hallvors

+0

hallvors, ¡tienes razón! Quizás no estoy hablando claro. He actualizado la respuesta. – NVI

+0

Marqué la respuesta como wiki de la comunidad. Entonces, puedes editar. – NVI

0

tomé el jQuery minified y copia pegada en mi userscript, y luego hicieron el clásico

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

que tiene la ventaja añadida de que le da jQuery, todo encerrado en la función mencionada en otra pregunta:

(function(){ 

    // Some code. 

})(); 

podría utilizar el material de Greasemonkey para importar jQuery a través de URL en la parte superior, pero esto es específico de Greasemonkey, Chrome/Opera, etc., no será compatible si lo haces de esta manera.

Cuestiones relacionadas