debugging firebug greasemonkey

debugging - ¿Cómo se puede depurar el script de Greasemonkey con la extensión Firebug?



(10)

Chromebug puede ver scripts de espacio aislado, http://getfirebug.com/wiki/index.php/Chromebug_User_Guide , pero no lo he probado en Greasemonkey.

No encontré una forma de depurar las secuencias de comandos de Greasemonkey con la extensión Firebug.

Alguien sabe como hacer esto ?

Gracias.


Como han dicho los otros, puede configurar un servidor HTTP simple y servirlo en su página usando Greasemonkey de la siguiente manera:

function loadScript(url) { var script = document.createElement(''script''); script.type = ''text/javascript''; script.src = url; document.getElementsByTagName(''head'')[0].appendChild(script); }

WEBrick y Python -m SimpleHTTPServer son buenos para esto. También podemos exponer las funciones de GM _... a la secuencia de comandos agregando un manejador de eventos personalizado al documento dentro de GreaseMonkey:

function gMHandler(e){ GM_log(e.detail.message); e.detail.response = "Hi!" } document.addEventListener("gM", gMHandler, false);

y luego en el script servido, al plantear este evento en un elemento DOM arbitrario se ejecutará el controlador y se modificará el parámetro de respuesta del elemento:

$(document).ready(function() { var event = new CustomEvent( "gM", { detail: { message: "Hello World!" } bubbles: true, cancelable: true, } ); document.getElementById("AnyElement").dispatchEvent(event); alert("Response was: " + event.detail.response); });


De forma similar a la sugerencia de @ bigml, puede ejecutarlo sin privilegios si configura un servidor web local (apache) para que sirva el archivo userscript, luego, en su lista de usuarios, agregue algo a lo largo de las líneas:

if (typeof GM_addStyle == "undefined") { loadScript("http://localhost/path/to/script.user.js"); } else { runScript(); } function loadScript(url) { var script = document.createElement(''script''); script.type = ''text/javascript''; script.src = url; document.getElementsByTagName(''head'')[0].appendChild(res); } function runScript() { // ... whatever your userscript does ... }

Por supuesto que no se estaría ejecutando en un contexto privilegiado. Pero de esta manera puede depurar continuamente el script como cualquier otro script.


He probado ChromeBug, parece que no funciona.

Con FireBug he tenido el punto de partida de éxito al agregar "depurador" a mi código GM. Esto causa un punto de interrupción y puedo inspeccionar las variables en la pila, pero el archivo correcto no se muestra, así que no puedo dar un paso ni nada.

He tenido el mayor éxito con FirebugMonkey (https: // addons.mozilla.org/en-US/firefox/addon/13623/), que acabo de trabajar para realizar la depuración básica de las secuencias de comandos de GreaseMonkey gracias a una explicación en una reciente comentar en la página de extensión por f0rsvinn. Estas son las instrucciones que acabo de publicar en http://groups.google.com/group/greasemonkey-users/browse_thread/thread/994cfa58c79d222 :

Nunca se me ocurrió que la forma en que funciona es creando su propia caja de arena alrededor del guión en lugar de usar Greasemonkey, realmente tiene que apagar el GM. Hay algunas cosas de aspecto de GM que no funcionarán, porque la secuencia de comandos realmente no está en GreaseMonkey. Como ejemplo, GM_getValue devuelve indefinido.

Aún así, funciona para la depuración básica, y es mucho mejor que nada.

Los pasos de uso son los siguientes:

  1. Instale FireBug 1.5.4 (las versiones posteriores no parecen funcionar)
  2. Instalar FireBugMonkey
  3. Use el Administrador de scripts en FireBugMonkey para seleccionar los archivos que desea depurar
  4. Desactivar GreaseMonkey (los scripts se ejecutarán dentro de FireBugMonkey, no
  5. GreaseMonkey)
  6. Habilitar FireBugMonkey
  7. Habilitar scripts en FireBug

Los scripts que agregó en el ScriptManager deberían estar visibles en la lista de scripts de FireBug.


Los Firefox y Firebug actuales ahora pueden depurar scripts actuales de Greasemonkey como cualquier otro javascript. Solo encuentra tu script *.user.js en el menú desplegable. La consola también funciona.

Esto funciona al menos en Firefox 28.0 y Firebug 1.12.7; No he probado versiones anteriores.


Nota: Para que funcione, probablemente tenga que establecer extensions.firebug.filterSystemURLs en falso. Consulte "Creación de perfiles de secuencias de comandos de Greasemonkey" en el Firebug, rastreador de errores. (Gracias a Shuman )


Ninguna de las otras soluciones aquí funcionó para mí, pero la answer Jan Odvarko sobre cómo depurar las extensiones de Firefox también funcionó perfectamente para los scripts de GreaseMonkey:

En Firefox 19 o posterior, es posible usar el depurador JS incorporado en el navegador. Vaya a about: config y configure los dos siguientes prefs:

devtools.chrome.enabled: true devtools.debugger.remote-enabled: true

Después de reiniciar el navegador, puede acceder al Depurador del navegador a través de Herramientas> Desarrollador web> Depurador del navegador.

(tenga en cuenta que debe aceptar la conexión entrante)

Ver más en: https://developer.mozilla.org/en/docs/Debugging_JavaScript

Luego solo busca el nombre de tu usuario y comienza a depurarlo.


Se puede hacer usando depurador nativo de Firefox como se mencionó anteriormente. A continuación se encuentra la instrucción para las versiones modernas de Firefox.

Establezca las siguientes preferencias en about:config :

devtools.chrome.enabled: true devtools.debugger.remote-enabled: true devtools.debugger.prompt-connection: false

Abra la ventana del depurador de scripts global: Open Menu -> Developer -> Browser Toolbox -> Debugger (o Ctrl + Shift + Alt + I ).

Busque el nombre de su usuario y comience a depurarlo.


- Esta respuesta es obsoleta, utilice la solución @Brock Adams anterior -

Cargue su script principal externamente, en lugar de ejecutarlo a través de GM. Entonces solo estás usando GM para inyectar el script.

Este es un poco híbrido entre @bigml y la solución de @ Yuval y usa jquery. También funciona en marcos.

// ==UserScript== // @name My GM script // @include The website I want this to run on // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js // ==/UserScript== $(document).ready(function() { // fetch jquery dependent scripts using $.getScript() });


Actualizador: el arreglo de Mene + Shuman ahora está roto con Firefox 30 y Firebug 2. Firefox 31 puede proporcionar soluciones (investigará). Mientras tanto, usa las "Estrategias generales de solución" que se enumeran a continuación.

Actualización: esta respuesta ahora está obsoleta.

Si abre about:config y
establecer extensions.firebug.filterSystemURLs en false
entonces puedes usar Firebug para depurar el script de Greasemonkey como cualquier otro.

Esto funciona independientemente del modo @grant .

Vea la respuesta de Mene, con la ayuda de Shuman .

Respuesta anterior:

Debido a que Greasemonkey opera en una caja de arena, Firebug no puede verlo. No hay una manera fácil de evitar esto.

Estrategias generales de solución:

  1. Pruebe todas las partes de una secuencia de comandos de GM que no utilizan GM_ funciones de GM_ , primero en la consola de JavaScript de Firebug. Minimice el uso de GM_ funciones GM_ y no use GM_log() en absoluto.

  2. Todas las funciones de la console de Firebug funcionan estupendamente desde dentro de un script de GM.


var e = document.createElement("script"); e.src = ''http://www.xxxxxxxx.com/yyyyyyyy.js''; e.type="text/javascript"; document.getElementsByTagName("head")[0].appendChild(e);

puede agregar esto a su xxx.user.js, e instalarlo en greasemonkey.

Entonces, puedes depurar tu js como desees.