2011-08-16 1 views
9

上書きされた後、何とかconsole.logにアクセスできますか?上書き後にwindow.consoleにアクセス

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

元のconsole.log機能を回復することは可能でしょうか?

+1

オリジナルとは何ですか?火かぶり? –

答えて

17

コンソールを上書きする前にバックアップすることができます。

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

次に、変数oldConsoleを使用できます。

あなたはそれをバックアップすることができない場合は、iFrameを作成し、そこからコンソールを盗むことができる
oldConsole.log('test'); 

(これはすべてのブラウザでは動作しない場合があります):

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

デモ:http://jsfiddle.net/jcG7E/2

+0

@Downvoter:なぜdownvote? –

+1

下記の答え(window.consoleの削除)がより便利です。私はそれがこの質問に対する受け入れられた答えであるべきだと言いたい。 – noah

+0

@RocketHazmat iframeからコンソールを盗む考えは、か​​なり良いハックです! –

-1

これはできません。誰でも上書きした場合を除いて、元に戻すコードが含まれています。

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

編集(2017年4月8日):このアドバイスは、もは​​や窓のプロトタイプで定義され、それが実際にそれを削除します削除されたのFirefox 52とChrome 57 consoleで、時代遅れではありません。少なくともFirefoxとクロームで定義されたconsoleオブジェクトに、あなたは、単にオリジナルのものを復元するために上書きされたプロパティを削除することができます


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

consoleプロパティが上に定義されたかのように、この作品windowオブジェクトのプロトタイプ - そうでない限り、ブラウザはここでいくつかの魔法をしています。

+0

これはChromeの最新バージョンでは動作していないようです。 – RelaXNow

+1

@RelaXNow:実際、このアドバイスは期限切れです。私はそのメモを付け加えた。 –

関連する問題