¿Cómo puedo usar jQuery en Greasemonkey?

234

Intenté poner esta línea pero no funciona:

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

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

-

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

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

Keira Nighly
fuente
14
@Jorge, ¿no sabías que ese sitio web no tiene absolutamente ninguna magia? Puede buscar cualquier cosa 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.
Rob Kennedy
55
Parece que ahora funciona bien incluso al editar el archivo después de la instalación.
Josef Sábl
66
Josef tiene razón: desde la versión 0.9.0 , Greasemonkey ahora instalará los archivos @required tan pronto como se edite el archivo.
Rory O'Kane
1
Además, no olvide seguir utilizando $(document).ready(function() {...});su código
usuario del
1
La forma más fácil de actualizarlo @requireses agregar un hash o una cadena de consulta al final de la @requireinstrucción, y cambiarla cuando sea necesario actualizarla. Similar a la forma en que "cazarías" un favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Respuestas:

189

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

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 

Si no tiene 0.8, use la técnica que Joan Piedra describe para agregar manualmente un scriptelemento a la página .

Entre versión 0.8 y 0.9, @requireestá solamente procesado cuando la secuencia de comandos se instala primero. Si cambia la lista de scripts necesarios, debe desinstalar su script y volver a instalarlo; Greasemonkey descarga el script requerido una vez en la instalación y luego utiliza una copia en caché.

A partir de 0.9, el comportamiento de Greasemonkey ha cambiado (para abordar un problema relacionado tangencialmente ) de modo que ahora carga los scripts necesarios después de cada edición; reinstalar el script ya no es necesario.

Rob Kennedy
fuente
Rob, ¿qué necesito hacer? Estoy creando mis secuencias de comandos de usuario utilizando el enlace Nueva secuencia de comandos de usuario. Agregué el @require y no funcionó. Entonces, ¿cómo puedo hacer que funcione? Por favor, quiero explicar el método @require a causa de trabajo es mucho más elegante que el método de los elementos de la escritura
Keira Nighly
1
Ok, entonces lo hice funcionar. ¡¡¡Gracias!!! Subí el script en Greasespot y lo instalé desde allí.
Keira Nighly
2
Me imagino que cuando creas 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 secuencias de comandos externas.
Rob Kennedy
Entonces, ¿no hay forma de usar @require en un nuevo script que está haciendo? : /
quano
44
Es bastante simple, @Quano. Cree un nuevo archivo .user.js, escriba su script en él y luego arrástrelo a su navegador para instalarlo. La limitación de requerir scripts externos solo está presente si crea el script desde la interfaz de usuario de Greasemonkey, pero no hay ningún requisito de que deba usar Greasemonkey para crear el archivo de script. Puede editar el script después de que esté instalado, pero si desea agregar nuevas @requiredirectivas, deberá desinstalarlo y reinstalarlo para que surta efecto.
Rob Kennedy
81

Si desea usar 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. ;)

Henrik Heimbuerger
fuente
44
Aparentemente no es compatible con Chrome - chromium.org/developers/design-documents/user-scripts
Ashley
Funciona en scriptish de Firefox!
Gqqnbig
2
Querrá probar que aún no lo tiene así: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } en Chrome, un sitio Jquery ya estará disponible.
Jonathon
Hmm Recibo un error realmente extraño cuando uso esto. Esto alert($('.submit_entry').length);es tanto un error como el envío de la alerta apropiada, al mismo tiempo.
Jonathon
21

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

El usuario solo descarga el script una vez de todos modos, por lo que el tamaño del script no es una gran preocupación. Además, si alguna vez desea que su script Greasemonkey funcione en entornos no GM (como los scripts de usuario GM-esque de Opera, o Greasekit en Safari), ayudará a no usar construcciones únicas de GM como @require.

Dan Lew
fuente
7

La solución de Rob es la correcta: úsela @requirecon la biblioteca jQuery y asegúrese de reinstalar su script para que se procese la directiva.

Una cosa que creo que vale la pena agregar es que puede usar jQuery normalmente una vez que lo haya incluido en su script, excepto por los métodos AJAX . Por defecto, jQuery busca XMLHttpRequest, que no existe en el contexto de Greasemonkey. Escribí sobre una solución alternativa en la que crea un contenedor para GM_xmlhttpRequest (la versión Greasemonkey de XHR) y usa jQuery's ajaxSetup()para especificar su versión ajustada como predeterminada. Una vez que hagas esto, puedes usar $.gety $.postcomo siempre

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

Ryan
fuente
4

Puede crear una nueva secuencia de comandos utilizando la Nueva secuencia de comandos 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 esta:

<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>

Observe la <Require>etiqueta

En su script puede usar la sintaxis directa de jQuery. Asegúrese de tener la etiqueta require en el encabezado Greasemonkey. Aquí hay un ejemplo de 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!");
});

Recuerde que después de modificar config.xml , debe reiniciar su navegador para que Greasemonkey vuelva a cargar la configuración.

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 copia el archivo manualmente allí.

Feliz jQuerying!

Auspex
fuente
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 ha instalado el script. Sin embargo, también 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

Tendrá que usar jQuery 1.3.2 hasta que las cosas cambien.

Conley Owens
fuente
3
Esta respuesta es obsoleta a partir de la versión 0.9 de GM o posterior.
Brock Adams
3
@Brock: ¿Por qué? ¿Puedes explicarnos noobs?
Trevor Sullivan
1

Puede obtener Component unavailablesi importa el script jQuery directamente.

Tal vez es de lo que estaba hablando @Conley ...

Puedes usar

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

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

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
BrunoLM
fuente
Me doy cuenta de que son 5 años, pero me pregunto: ¿no está mal obtener el objeto jQuery como ya estaba definido en la página, refiriéndose a él como unsafeWindow.jQuery?
jj_
0

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

Dunstkreis
fuente