2010-03-24 9 views
6

Soy totalmente nuevo en GreaseMonkey, pero estoy tratando de hacer un pequeño guión.

// ==UserScript== 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 
// ==/UserScript== 
(function() { 
    $ = unsafeWindow.jQuery; 
    alert($); // this gives 'undefined' 
}()); 

¿Por qué dar la alerta undefined y cómo solucionar este problema?

ACTUALIZACIÓN

yo probamos este:

(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($); 
    } 
})(); 

pero esto me dio un bucle infinito de OK-alerta. Parece que jQuery no se carga en absoluto.

+0

tratar estas cuestiones relacionadas con: 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

Respuesta

4

Editar: ¿Podría ser this?

Quizás no tenga una versión reciente de Greasemonkey. Fue la versión 0.8 que agregó @require. Además, recuerde que @require solo se procesa cuando el script se instala por primera vez. Si cambia la lista de scripts necesarios, debe desinstalarlo y reinstalarlo; Greasemonkey descarga el script requerido una vez en la instalación y utiliza una copia en caché a partir de entonces.


El guión GM podría estar ejecutando antes de la página está lista (es decir, antes de jQuery ha inicializado). Yo uso este código en mis scripts de Greasemonkey con el fin de utilizar 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

Encontré esta construcción también, pero esto fue antes de que greasemonkey pudiera usar @require, si no lo entendía correctamente. Lo probaré. – Natrium

+0

@Natrium: No noté el '@ require'. No lo he usado antes, pero ¿sería 'jQuery', no' unsafewindow.jQuery'? Si está utilizando '@ require', creo que lo definió en el script (no en' unssafeWindow') – Kip

+0

parece que @require no funciona tan bien. Ahora utilicé el buen método anterior: http://joanpiedra.com/jquery/greasemonkey/ Y esto funciona como un encanto. ¡Gracias! – Natrium

1

@require está destinado a realizar una descarga de recursos de una sola vez.
En la primera instalación, el recurso se descarga y se coloca dentro de la carpeta del script. El script requerido se ejecuta antes del userscript.
Se ejecuta bajo el mismo alcance que la secuencia de comandos del usuario, no debajo de unsafeWindow.
Si está escribiendo el script usted mismo, no obtendría el recurso hasta que realmente lo instale (o edite los archivos GM xml para reconocer el recurso y plantar el archivo en el directorio del script, dentro del directorio de perfil de usuario de firefox).

Si elige la (simple) desinstalación \ reinstalación método, no se olvide de copia de seguridad de userscript ... :)

0

nueva necesidad de Greasemonkey para agregar // @grant none utilizar // @require

Cuestiones relacionadas