2010-01-16 8 views
10

He visto the other question on here acerca de la carga de jQuery en un Greasemonkey. Después de haber probado este método, con esta declaración requieren dentro de mis ==UserScript== etiquetas:Greasemonkey @require jQuery no funciona "Componente no disponible"

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

sigo teniendo el siguiente mensaje de error en la consola de errores de Firefox:

Error: Component is not available 
Source File: file:///Users/greg/Library/Application%20Support/ 
     Firefox/Profiles/xo9xhovo.default/gm_scripts/myscript/jquerymin.js 
Line: 36 

Esto evita que el código se ejecute Greasemonkey. Me he asegurado de haber incluido el @require para jQuery y haber guardado mi archivo js antes de instalarlo, ya que los archivos necesarios solo se cargan durante la instalación.

Código:

// ==UserScript== 
// @name   My Script 
// @namespace  http://www.google.com 
// @description My test script 
// @include  http://www.google.com 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 
// ==/UserScript== 

GM_log("Hello"); 

que tienen Greasemonkey 0.8.20091209.4 instalado en Firefox 3.5.7 en mi MacBook Pro, Leopard (10.5.8). Borré mi caché (excepto las cookies) y desactivé todos los demás complementos, excepto Flashblock 1.5.11.2, Web Developer 1.1.8 y Adblock Plus 1.1.3.

Mi config.xml con mi script de Greasemonkey instalado:

<UserScriptConfig> 
<Script filename="myscript.user.js" name="My Script" 
namespace="http://www.google.com" description="My test script" enabled="true" 
basedir="myscript"> 
    <Include>http://www.google.com</Include> 
    <Require filename="jquerymin.js"/> 
</Script> 

puedo ver jquerymin.js sentaron en el directorio gm_scripts/myscript/.

Además, ¿es común que se produzca este error en la consola al instalar un script de Greasemonkey?

Error: not well-formed 
Source File: file:///Users/Greg/Documents/myscript.user.js 
Line: 1, Column: 1 
Source Code: 
    // ==UserScript== 
+0

Probé tu script, funcionó bien. No hay problema aquí, usando Greasemonkey versión 0.8.20091129.3. ¿Seguro que desinstaló correctamente el script anterior antes de instalar el nuevo? También he tenido problemas con el almacenamiento en caché en Firefox. – Anders

+0

Esto parece ser un error con jquery 1.4, recién publicado hace un par de días. Al menos, tengo el mismo problema con jquery 1.4 pero no con jquery 1.3. – ShreevatsaR

Respuesta

6

Bien, entonces lo investigué un poco más. He utilizado la secuencia de comandos exactamente, sino que se utiliza nuestra versión de jQuery, haciendo que parezca esto:

// ==UserScript== 
// @name   My Script 
// @namespace  http://www.google.com 
// @description My test script 
// @include  http://www.google.se/* 
// @include  http://www.dn.se/* 
// @require  http://myserver/jquery-1.3.2.js 
// ==/UserScript== 

GM_log("Hello"); 

Esto funciona muy bien para mí, mi conjetura, el jQuery arriba en la API de Google le faltan algunas funciones. Debido a este código anterior, funciona bien. También tenga en cuenta /* al final de cada url, inclúyalo.

Pruebe con otra JQuery y cambie las URL y debería funcionar correctamente.

+0

Gracias, he cambiado mi URL obligatoria a http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js y funciona. –

0

El atributo @require no funciona correctamente en Greasemonkey y jQuery ... este mismo error puede ocurrir en FireBug también.

Una alternativa es incluir jQuery en la página a través de Greasemonkey creando la etiqueta del script. Here's how to do that.

+0

Gracias, he visto ese enlace. Me gustaría saber por qué @require es un método documentado pero no funciona para mí. http://www.keyvan.net/2008/10/greasemonkey-jquery/ –

+0

Estamos usando Greasemonkey con el atributo @require para JQuery y funciona muy bien para nosotros. – Anders

0

No del todo cierto, parece que jQuery 1.4 intenta detectar algo utilizando una llamada que simplemente no funciona en el entorno de greasemonkey. @require normalmente funciona como debería.

Volviendo a la versión 1.3.2 funciona, pero prefiero encontrar una solución que me permita usar 1.4.

por cierto, yo uso esto, un poco diferente:

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

he encontrado una manera no ideal para usarlo con jQuery 1.4.1 - esto parece solucionarlo. Es el new browser sniffing que parece "romperlo".

jquery-1.4.1.min.js:

[old] 36: var o=r.createElement("div");n="on"+n;var m=n in o; 
    [new] 36: var o=r.createElement("div");n="on"+n;var m=true; 

jquery-1.4.1.js

[old] 934: var isSupported = (eventName in el); 
    [new] 934: var isSupported = true; 
6

estaba dando tumbos tratando de hacer frente a este problema con GM 0.8 y jQuery 1.4.2 y encontró esto: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Me parece la respuesta definitiva a la pregunta y cómo solucionarla. La solución alternativa funcionó para mí.

+1

Gracias por vincular eso, en el futuro esta es la respuesta definitiva (ichau también mencionó la misma solución pero sin un enlace). En el momento en que hice esta pregunta, 1.4 acababa de salir y estaba usando 1.3.2 para lo cual la respuesta de Anders abordó mi problema. –

+0

Gracias por el enlace, edité el mío para incluir el enlace por si acaso. No tenía un enlace en ese momento y copié algunos comentarios de mi script en :) –

2

Patch para jQuery-1.4.3.min.js

[viejo] línea 41 u.createElement ("div"); s = "ON" + s; var B = s en v;
[nuevo] línea 41 u.createElement ("div"); s = "on" + s; var B = verdadero;

3

Buenas noticias y actualización de las publicaciones:

Lo anterior el parche permitió que las versiones de jQuery anteriores a la versión 1.5.2 se ejecutaran en los scripts de Greasemonkey, pero afortunadamente el parche ya no es necesario si usa el curren t jQuery versión 1.5.2.

que comprueba su código y se dio cuenta que el código de función eventSupported en jQuery

var eventSupported = function(eventName) { ... } 

se ha actualizado con la consecuencia de que no parcheada jQuery 1.5.2 ahora se ejecuta en Greasemonkey 0.9.2.