2009-04-23 7 views
52

¿Es posible agregar mensajes a la consola de error incorporada de Firefox desde el código JavaScript que se ejecuta en las páginas web?Iniciar sesión en Firefox Error Console desde JavaScript

Sé que tengo Firebug, que proporciona un objeto console y su propia consola de error, pero estaba buscando una solución rápida anteriormente y no pude encontrar nada.

Supongo que es posible que no sea posible en absoluto, para evitar que las páginas web maliciosas envíen spam al registro.

Respuesta

32

No puede escribir en la consola directamente desde JavaScript que no es de confianza (por ejemplo, scripts que provienen de una página). Sin embargo, incluso si la instalación de Firebug no le gusta a usted, le recomiendo echarle un vistazo Firebug Lite, que no requiere instalación en el navegador (ni, de hecho, no es siquiera requiere Firefox). Es un script que puedes incluir en cualquier página web (incluso dinámicamente), que te dará algunas funciones básicas de Firebug (como console.log()).

+0

Interesante, lo tendré en cuenta. –

+0

Y en el navegador * SeaMonkey * (que también está basado en * Gecko *), puede habilitar el registro en la consola de JavaScript a través de la preferencia oculta 'browser.dom.window.console.enabled' (desde 2.11, consulte [error 739965] (https://bugzilla.mozilla.org/show_bug.cgi?id=739965)). Esto no afecta a * FireBug *, ya que todos los resultados 'console.log (...)' aparecen inmediatamente en su consola independientemente de la pref. – Bass

3

AFAIK, no es posible. Pero si está interesado en cómo las extensiones en Firefox interactúan con la consola de error, check this out.

+0

+1 para Components.utils.reportError - ¡Me olvido de cómo es la llamada y de perder el tiempo para encontrarla de nuevo, una y otra vez! – Stefano

6

Simplemente instalaría Firebug y usaría console.log. Si usted no puede hacer eso, sin embargo, siempre se puede producir un error:

throw "foobar"; 
throw new Error("bazquux"); 

Por supuesto, esto le romper el código que se está ejecutando actualmente, por lo que no se puede utilizar para registro detallado, pero si puede evitarlo, creo que es la única manera de obtener algo iniciado de la caja.

+0

No estoy en contra de instalar Firebug (que tengo ahora), solo quería saberlo con certeza. Lanzar un error explícitamente no era una opción, porque estaba rastreando mi código. –

+2

Si desea un mensaje de error sin bloqueo (por ejemplo, monitoreando una variable en un ciclo), use setTimeout ("throw new Error ('Wheeeeeeee!')", 0); –

+2

bazquux es EXACTAMENTE el tipo de error que quería notificarme acerca de – bobobobo

1

Si te interesa, echa un vistazo a un script que escribí: es un reemplazo Firebug "barato" que no interfiere con ninguna consola normal (como Safari o Chrome) pero sí lo hace con casi todos los métodos Firebug :

http://code.google.com/p/glentilities/

mirar debajo del capó y verá lo que quiero decir con "barato". :-)

Combínelo con los serializadores JSON de YUI o json.org para replicar console.dir.

Firebug Firebug Lite y son GUI sin duda mejor, pero yo uso mi cosecha propia uno todo el tiempo para mantener el registro de forma segura incluso para el código de producción - sin constante comentando & des-comentar,

33

Sí, que pueda = P

function log(param){ 
    setTimeout(function(){ 
     throw new Error("Debug: " + param) 
    },0) 
} 

//Simple Test: 
alert(1) 
log('This is my message to the error log -_-') 
alert(2) 
log('I can do this forever, does not break') 
alert(3) 

actualización de una función real

Este es un truco simple, sólo por diversión.

+5

Al menos use una función real en lugar de una cadena evaluada ... – nornagon

+4

@nornagon Sí, entiendo, sería mejor con una función, pero hice esto para ser compatible con IE bad setTimeout () –

+0

Ah, ya veo. Tiene sentido :) – nornagon

46

Si se define una función global que comprueba la existencia de window.console, puede utilizar Firebug para el rastreo y todavía juega bien con otros navegadores y/o si se enciende la consola de Firebug rastreo de apagado:

debug = function (log_txt) { 
    if (typeof window.console != 'undefined') { 
     console.log(log_txt); 
    } 
} 

debug("foo!"); 
+0

+1 esto es útil si accidentalmente deja console.log's en su código de producción. –

+16

No es necesario ajustar la función console.log. Al envolverlo, perderá la funcionalidad de formateo. Simplemente asignes a una función de depuración: 'var debug = function() {}; if (window.console! = undefined) {debug = console.log; } ' Ahora también puedes hacer esto: 'debug ("% s "," a ")' – ceving

+1

@ceving: ¿sabes por qué con tu solución en Chrome obtengo: 'TypeError: Ilegal invocation'? –

2

Esta función no requiere extensión ni biblioteca. Sin embargo, otorga privilegios completos al sitio web relevante. No te preocupes ya que eres quien lo está desarrollando, ¿verdad?


// Define mylog() function to log to Firefox' error console if such a 
// thing exists 
function defineMyLog() 
{ 
    // Provide a useless but harmless fallback 
    mylog = function(msg) { }; 
    // return; // disable in production 

    if (typeof(netscape) === "undefined") { 
     // alert("Logging implemented only for Firefox"); 
     return; 
    } 
    // The initial auth popup can be avoided by pre-setting some magic user_pref 
    // ("capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc. 
    try { 
     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
    } catch (e) { // User has denied privileges 
     // alert(e.name + ": " + e.message); 
     return; 
    } 
    ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"] 
           .getService(Components.interfaces.nsIConsoleService); 
    mylog = function (msg) 
    { 
     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
     ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg); 
    } 
    mylog("Firefox logging function has been defined"); 

    // window.open("javascript:"); // this URL does not work anymore? 
} 
+0

Esto arroja un error de permisos en Firefox 4: 'Permiso denegado para obtener la propiedad XPCComponents.classes'. – jmort253

+0

Gracias por los comentarios jmort253. ¿Intentó otorgar la capacidad en user_pref como se demuestra en un comentario en el código? – MarcH

+0

¿Dónde exactamente se arroja el error? – MarcH

14

window.console no está definido en Firefox 4 beta 6, incluso si Firebug 1.6X.0b1 está activada y abierta, probablemente a causa de problemas de privilegios que otros discuten. Sin embargo, Firefox 4 tiene una nueva Herramienta> Consola web, y si está abierta tiene un objeto window.console y un código JavaScript que no es de confianza en la página puede usar console.log(). La consola web está en curso (consulte https://wiki.mozilla.org/Firefox/Projects/Console), es posible que deba cambiar la configuración denominada devtools. * En about: config, YMMV.

+1

Esta es la solución absolutamente perfecta para la pregunta. –

0

Tuve un problema hoy, y noto que la consola en Firebug tiene pestañas diferentes, y la mía estaba en información de depuración, y debes seleccionar la opción TODAS para ver el trabajo de console.log sin errores de trowing. Simple como este! ; ^)

Cuestiones relacionadas