jquery google-chrome userscripts

¿Por qué jQuery no funciona en los scripts de usuario de Chrome(Greasemonkey)?



google-chrome userscripts (6)

Posible duplicado:
¿Cómo puedo usar jQuery en los scripts de Greasemonkey en Google Chrome?

No puedo conseguir que este script de usuario funcione en Google Chrome.

// ==UserScript== // @name voip // @namespace 1 // @description voip // @include * // @require http://jquery.com/src/jquery-latest.js // ==/UserScript== $(document).ready(function() { alert("Hello world!"); });

La alerta no aparece. Si acabo de poner alert("Hello world!"); En el guión, funciona.

¿Cómo puedo usar jQuery en los scripts de usuario de Chrome?


El documento de diseño para la implementación del script de usuario de Chrome menciona estos problemas conocidos:

  • Chromium no admite @require , @resource , unsafeWindow , GM_registerMenuCommand , GM_setValue o GM_getValue .
  • GM_xmlhttpRequest es solo del mismo origen.

Esto se aborda en la pregunta Incluir Jquery dentro del script GreaseMonkey en Google Chrome . Aquí está mi respuesta de esa pregunta :

He escrito algunas funciones basadas en el guión de la respuesta de Erik Vold para ayudarme a ejecutarme a ejecutar funciones, código y otros guiones en un documento. Puede usarlos para cargar jQuery en la página y luego ejecutar el código bajo el alcance de la window global.

Ejemplo de uso

// ==UserScript== // @name Example from https://.com/q/6825715 // @version 1.2 // @namespace https://.com/q/6825715 // @description An example, adding a border to a post on . // @include https://.com/questions/2588513/* // ==/UserScript== var load,execute,loadAndExecute;load=function(a,b,c){var d;d=document.createElement("script"),d.setAttribute("src",a),b!=null&&d.addEventListener("load",b),c!=null&&d.addEventListener("error",c),document.body.appendChild(d);return d},execute=function(a){var b,c;typeof a=="function"?b="("+a+")();":b=a,c=document.createElement("script"),c.textContent=b,document.body.appendChild(c);return c},loadAndExecute=function(a,b){return load(a,function(){return execute(b)})}; loadAndExecute("//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js", function() { $("#answer-6825715").css("border", ".5em solid black"); });

Puede hacer clic aquí para instalarlo, si confía en que no estoy tratando de engañarlo para que instale algo malicioso y que nadie haya editado mi publicación para señalar otra cosa. Vuelve a cargar la página y deberías ver un borde alrededor de mi publicación.

Funciones

load(url, onLoad, onError)

Carga la secuencia de comandos en la url en el documento. Opcionalmente, se pueden proporcionar devoluciones de llamada para onLoad y onError .

execute(functionOrCode)

Inserta una función o cadena de código en el documento y lo ejecuta. Las funciones se convierten a código fuente antes de insertarse, por lo que pierden su alcance / cierre actual y se ejecutan debajo del alcance de la window global.

loadAndExecute(url, functionOrCode)

Un atajo; esto carga un script desde url , luego inserta y ejecuta functionOrCode si tiene éxito.

Código

Fuente CoffeeScript

Los escribí en CoffeeScript ( un pequeño lenguaje que compila a JavaScript ). Aquí está la fuente de CoffeeScript para que usted use CofeeScript. Para los usuarios de JavaScript, el código compilado y minificado se incluye a continuación.

load = (url, onLoad, onError) -> e = document.createElement "script" e.setAttribute "src", url if onLoad? then e.addEventListener "load", onLoad if onError? then e.addEventListener "error", onError document.body.appendChild e return e execute = (functionOrCode) -> if typeof functionOrCode is "function" code = "(#{functionOrCode})();" else code = functionOrCode e = document.createElement "script" e.textContent = code document.body.appendChild e return e loadAndExecute = (url, functionOrCode) -> load url, -> execute functionOrCode

JavaScript compilado y minificado (468 caracteres)

var load,execute,loadAndExecute;load=function(a,b,c){var d;d=document.createElement("script"),d.setAttribute("src",a),b!=null&&d.addEventListener("load",b),c!=null&&d.addEventListener("error",c),document.body.appendChild(d);return d},execute=function(a){var b,c;typeof a=="function"?b="("+a+")();":b=a,c=document.createElement("script"),c.textContent=b,document.body.appendChild(c);return c},loadAndExecute=function(a,b){return load(a,function(){return execute(b)})};


El soporte de Greasemonkey en Chrome no incluye declaraciones requeridas. Sería mejor crear una extension lugar de un script de Greasemonkey.

Eso, o podrías usar la API de Google para cargar jQuery.



Solo crea una extensión de Chrome usando un script de contenido . Es bastante simple:

manifest.json

{ "name": "Hello World", "version": "1.0", "description": "Greets the world", "content_scripts": [ { "matches": ["*"], "css": ["main.css"], "js": ["jquery.min.js","main.js"], "run at":"document_end", } ] }

main.js

$(document).ready(function(){ alert(''Hello World''); });

Vale la pena señalar que en este ejemplo, ajustar la alerta en $ (document) .ready () no es realmente necesario, ya que el archivo de manifiesto ya especifica que el script debe "run at" : "document_end" .

Además, como verá en los documentos, jquery.min.js y main.js deben incluirse en la misma carpeta que manifest.json


Trate de usar TamperMonkey .

Tu guión funcionó como está para mí y he creado varios guiones de otros usuarios que utilizan jQuery.


Una solución sencilla (si es viable para usted) sería simplemente copiar y pegar la versión minificada de jQuery en su script de greasemonkey.

// ==UserScript== // @name voip // @namespace 1 // @description voip // @include * // ==/UserScript== //jQuery 1.4.2 minified code (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll... .... A.jQuery=A.$=c})(window); //your code $(document).ready(function() { alert("Hello world!"); });