2011-08-16 23 views
9

¿Es posible de alguna manera acceder a console.log después de sobrescribirlo?Acceso window.console después de sobrescribir

window.console = { log: function (msg) { alert(msg); }, /* etc... */ }; 

¿Sería posible recuperar la funcionalidad original de console.log?

+1

¿Cuál es el original? Firebug? –

Respuesta

17

Puede realizar una copia de seguridad de la consola antes de sobrescribirla.

var oldConsole = window.console; 
window.console = { log:function(msg){alert(msg)} //...}; 

Luego puede usar la variable oldConsole.

oldConsole.log('test'); 

Si no puede realizar copias de seguridad, puede crear un marco flotante, y luego robar la consola de allí (esto puede no funcionar en todos los navegadores):

var i = document.createElement('iframe'); 
i.style.display = 'none'; 
document.body.appendChild(i); 
window.console = i.contentWindow.console; 

Demostración: http://jsfiddle.net/jcG7E/2

+0

@Downvoter: ¿Por qué un voto a favor? –

+1

La respuesta a continuación (eliminar ventana.consola) es más útil. Yo diría que debería ser la respuesta aceptada a esta pregunta. – noah

+0

@RocketHazmat ¡la idea de robar la consola de un iframe es un truco bastante bueno! –

-1

No es posible. Excepto si quien lo ha sobrescrito ha incluido algún código para deshacerlo.

0
var customLog = { 
    oriLog: '', 
    Log: function(){ 
     // create string to display 
     var displaystring = ''; 
     for (var i = 0, len = arguments.length; i < len; i++) { 
      displaystring += arguments[i]; 
      if (i + 1 != len) 
       displaystring += ', '; 
     } 
     alert(displaystring); 
     customLog.oriLog(arguments); 
    } 
} 
window.onload = function(){ 
    if (console != null) { 
     customLog.oriLog = console.log; 
     console.log = customLog.Log; 
    } 

} 
5

Editar (08/04/2017): Este consejo es obsoleta, en Firefox y Chrome 52 57 console ya no se define en el prototipo de la ventana y la supresión de lo que realmente lo eliminará.


Al menos con el objeto console definido por Firefox y Chrome, puede simplemente eliminar la propiedad sobrescribe para restaurar la original:

window.console = {}; 
delete window.console; 
window.console.log("This works!"); 

Esto funciona como si la propiedad console se define en el prototipo del objeto window - excepto que no lo es, los navegadores están haciendo magia aquí.

+0

Esto no parece funcionar en la última versión de Chrome. – RelaXNow

+1

@RelaXNow: De hecho, este consejo ha expirado. Agregué una nota sobre eso. –

Cuestiones relacionadas