2011-02-27 15 views
19

me gustaría saber por qué el código de seguimiento no funciona en el Google Chrome:alias al cromo console.log

// creates a xss console log 

var cl = (typeof(console) != 'undefined') ? console.log : alert; 
cl('teste'); 

de salida: TypeError no detectada: invocación ilegal

gracias.

+0

yo sólo encontré con un problema similar, en lo que quería anular el método 'console.log' (para capturar y enviar la salida). Mi solución fue declarar el alias en el objeto 'console'. Aproximadamente: 'console .__ log = console.log; console.log = function() {__ console.log.apply (console, arguments);};'. –

Respuesta

30

Cuando escribe cl();, llama al log en el contexto global.

El console.log de Chrome no quiere que se llame al objeto window.

su lugar, puede escribir

cl = function() { return console.log.apply(console, arguments); }; 

Para ello, será log en el contexto de console.

+0

Entonces, ¿cómo puedo hacer eso? – augustowebd

+0

Gracias Slaks, ¡funciona muy bien! – augustowebd

+5

@augustowebd: para más información sobre este "contexto", he escrito un par de publicaciones en el blog que pueden ser útiles: * [Métodos míticos] (http://blog.niftysnippets.org/2008/03/mythical- methods.html) * y * [Debe recordar 'this'] (http://blog.niftysnippets.org/2008/04/you-must-remember-this.html) * –

2

Desafortunadamente @SLaks respuesta del isnt aplica a IE, ya que utiliza la ventana a objetos como contexto en console.log-method.

estaría sugiere otra manera que imposible dependerá de navegador:

!window.console && (console = {}); 

console.debug = console.debug || $.noop; 
console.info = console.info || $.noop; 
console.warn = console.warn || $.noop; 
console.log = console.log || $.noop; 

var src = console, desc = {}; 
desc.prototype = src; 
console = desc; 

desc.log = function(message, exception) { 
    var msg = message + (exception ? ' (exception: ' + exception + ')' : ''), callstack = exception && exception.stack; 
    src.log(msg); 
    callstack && (src.log(callstack)); 
    //logErrorUrl && $.post(logErrorUrl, { message: msg + (callstack || '') }); // Send clientside error message to serverside. 
};