2011-08-16 28 views
9

È possibile accedere in qualche modo a console.log dopo essere stato sovrascritto?Accesso alla finestra.console dopo sovrascrittura

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

Potrebbe essere possibile ripristinare la funzionalità console.log originale?

+1

Qual è l'originale? Firebug? –

risposta

17

È possibile eseguire il backup della console prima di sovrascriverla.

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

Quindi è possibile utilizzare la variabile oldConsole.

oldConsole.log('test'); 

Se non è possibile eseguire il backup, è possibile creare un iFrame, e quindi rubare il console da lì (questo potrebbe non funzionare in tutti i browser):

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

Demo: http://jsfiddle.net/jcG7E/2

+0

@Downvoter: perché un downvote? –

+1

La risposta seguente (elimina window.console) è più utile. Direi che dovrebbe essere la risposta accettata a questa domanda. – noah

+0

@RocketHazmat l'idea di rubare la console da un iframe è un bel trucco! –

-1

Non è possibile. Tranne se chi ha sovrascritto ha incluso del codice per annullarlo.

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

Modifica (2017/04/08): Questo consiglio è obsoleto, in Firefox e Chrome 52 57 console non è più definito sul prototipo finestra e la cancellazione sarà davvero eliminarlo.


Almeno con l'oggetto console definito da Firefox e Chrome, è possibile semplicemente eliminare la proprietà sovrascritto per ripristinare quella originale:

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

Questo funziona come se la proprietà console sono stati definiti sulla prototipo dell'oggetto window - tranne che non lo è, i browser stanno facendo un po 'di magia qui.

+0

Questo non sembra funzionare nell'ultima versione di Chrome. – RelaXNow

+1

@RelaXNow: questo avviso è scaduto. Ho aggiunto una nota su questo. –

Problemi correlati