2009-05-13 9 views
216

He intentado poner esta línea pero no funciona:¿Cómo puedo usar jQuery en Greasemonkey?

// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js 

jQuery no funciona en Greasemonkey en absoluto. ¿Hay alguna otra forma de usar jQuery en Greasemonkey?

-

Para todas las personas que tienen el mismo problema, debe cargar el archivo en greasespot luego instalarlo desde allí.

¡La opción Crear nuevo script no funcionaría!

+0

@ Rob y quién lo hará ese trabajo? ¿Cómo se puede instalar un script que nunca entre en userscripts.org? –

+14

@Jorge, ¿no sabías que ese sitio web no tiene absolutamente nada de mágico? Puede navegar a cualquier elemento con una extensión de archivo .user.js, y Greasemonkey le preguntará si desea instalarlo. Eso incluye archivos en su computadora local. Instalar cualquier script es tan simple como arrastrarlo a su navegador. –

+5

Parece que ahora funciona bien incluso cuando se edita el archivo después de la instalación. –

Respuesta

170

Quizás no tenga una versión reciente de Greasemonkey. Fue la versión 0.8 que agregó @require.

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js 

Si usted no tiene un 0,8, a continuación, utilizar la técnica de Joan Piedra describe para manually adding a script element to the page.

Entre la versión 0.8 y 0.9, @require es solo se procesa cuando se instala el script por primera vez. Si cambia la lista de scripts necesarios, debe desinstalar el script y volver a instalarlo; Greasemonkey descarga el script requerido una vez en la instalación y utiliza una copia en caché a partir de entonces.

A partir de 0.9, el comportamiento de Greasemonkey ha cambiado (a la dirección a tangentially related issue) por lo que ahora carga los scripts necesarios después de cada edición; la reinstalación de la secuencia de comandos ya no es necesaria.

+0

Rob, entonces, ¿qué debo hacer? Estoy creando mis scripts de usuario usando el enlace New User Script. Agregué el @require y no funcionó. Entonces, ¿cómo puedo hacer que funcione? Explique que quiero que el método @require funcione porque es mucho más elegante que el método del elemento de secuencia de comandos –

+1

Ok, así que lo hice funcionar. ¡¡¡Gracias!!! Cargué el script en Greasespot y lo instalé desde allí. –

+2

Imagino que cuando crea un nuevo script desde Greasemonkey, el script se instala inmediatamente. Esa secuencia de comandos es el archivo vacío predeterminado, lo que significa que ha perdido la oportunidad de requerir cualquier script externo. –

19

No hay absolutamente nada de malo en incluir la totalidad de jQuery en su script de Greasemonkey. Simplemente tome la fuente y colóquela en la parte superior de su script de usuario. No es necesario crear una etiqueta de script, ¡ya que está ejecutando JavaScript!

El usuario solo descarga el script de todas formas, por lo que el tamaño del script no es una gran preocupación. Además, si alguna vez quiere que su script de Greasemonkey funcione en entornos no GM (como las secuencias de comandos de usuario de GM, o Greasekit en Safari), le ayudará a no utilizar construcciones únicas de GM, como @require.

3

Puede crear un nuevo guión utilizando el Nuevo guión de usuario en Greasemonkey, pero debe editar el archivo config.xml dentro de la carpeta gm_scripts.

Su archivo config.xml debe tener una sintaxis similar a la siguiente:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test"> 
     <Include>http://*</Include> 
     <Require filename="jquery.js"/> 
</Script> 

Aviso <Require> la etiqueta.

En su secuencia de comandos puede utilizar la sintaxis jQuery directa. Asegúrese de tener la etiqueta de solicitud en el encabezado de Greasemonkey. Aquí está un ejemplo Hello World:

// ==UserScript== 
// @name   Test jQuery 
// @namespace  http://www.example.com/jQueryPlay/ 
// @description Just a test 
// @include  http://* 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js 
// ==/UserScript== 

$(document).ready(function() { 
     alert("Hello world!"); 
}); 

recordar que después de la modificación de la config.xml tiene que reiniciar su navegador para Greasemonkey para recargar la configuración de nuevo.

También tenga en cuenta que debe copiar el archivo jquery.js en la carpeta del directorio de scripts para que esto funcione. Probé esto, y solo funciona si realmente copias el archivo allí manualmente.

Happy jQuerying!

7

La solución de Rob es la correcta: use @require con la biblioteca jQuery y asegúrese de volver a instalar su script para que la directiva se procese.

Una cosa que creo que vale la pena agregar es que puede usar jQuery normalmente una vez que lo haya incluido en su secuencia de comandos, a excepción de los métodos AJAX. Por defecto, jQuery busca XMLHttpRequest, que no existe en el contexto de Greasemonkey. Escribí sobre a workaround donde crea un contenedor para GM_xmlhttpRequest (la versión Greasemonkey de XHR) y usa jQuery's ajaxSetup() para especificar su versión envuelta como la predeterminada. Una vez que haga esto, puede usar $.get y $.post como de costumbre.

También puede tener problemas con $.getJSON de jQuery porque carga JSONP usando etiquetas <script>. Esto genera errores porque jQuery define la función de devolución de llamada en el ámbito de la ventana de Greasemonkey, y los scripts cargados buscan la devolución de llamada en el alcance de la ventana principal. Su mejor opción es usar $.get y analizar el resultado con JSON.parse().

4

Actualización: Como dice el comentario a continuación, esta respuesta es obsoleta.

Como todos los demás han dicho, @require solo se ejecuta cuando se instala el script. Sin embargo, debe tener en cuenta que actualmente jQuery 1.4. * No funciona con greasemonkey. Puede ver aquí para más detalles: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Deberá usar jQuery 1.3.2 hasta que las cosas cambien.

+3

Esta respuesta es obsoleto a partir de la versión GM 0.9 o posterior. –

+3

@Brock: ¿Por qué? ¿Puedes explicarnos noobs? –

1

Puede obtener Component unavailable si importa el script jQuery directamente.

Tal vez es lo @Conley estaba hablando ...

Usted puede utilizar

@require  http://userscripts.org/scripts/source/85365.user.js 

que es una versión modificada para trabajar en Greasemonkey y, a continuación, obtener el objeto jQuery

var $ = unsafeWindow.jQuery; 
$("div").css("display", "none"); 
+0

Me doy cuenta de que esto es 5 años, pero me pregunto: ¿no es incorrecto obtener el objeto jQuery como si ya estuviera definido en la página, refiriéndose a él como inseguroWindow.jQuery? –

69

Si desea utilizar jQuery en un sitio donde ya está incluido, este es el camino a seguir (inspirado en BrunoLM):

var $ = unsafeWindow.jQuery; 

Sé que esta no era la intención original de la pregunta, pero se está convirtiendo cada vez más en un caso común y no excluyó explícitamente este caso. ;)

+4

Aparentemente no es compatible con Chrome: http://www.chromium.org/developers/design-documents/user-scripts – Ash

+0

¡Funciona en Scriptish of Firefox! – Gqqnbig

+1

Querrá probar que ya no lo tiene así: 'if (typeof $ == 'undefined') {var $ = unsafeWindow.jQuery; } ' En Chrome, un sitio Jquery ya estará disponible. – Jonathon

2

el meta @require no funciona cuando se quiere desvincular eventos en una página web utilizando jQuery, usted tiene que utilizar una biblioteca jQuery incluido en la página web y luego conseguir que en Greasemonkey con var $ = unsafeWindow.jQuery;How do I unbind jquery event handlers in greasemonkey?

0

@require es ¡NO solo se procesa cuando la secuencia de comandos se instala por primera vez! En mis observaciones, se procesa en el primer tiempo de ejecución! Entonces puede instalar un script a través del comando de Greasemonkey para crear un nuevo script.Lo único que debe tener cuidado es que no se active la recarga de la página, antes de agregar la parte @require. (y guarde el nuevo script ...)

Cuestiones relacionadas