簡體   English   中英

覆蓋后訪問 window.console

[英]Access window.console after overwrite

是否有可能在被覆蓋后以某種方式訪問 console.log?

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

是否有可能重新獲得原始的 console.log 功能?

您可以在覆蓋之前備份控制台。

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

然后您可以使用oldConsole變量。

oldConsole.log('test');

如果無法備份,可以創建 iFrame,然后從那里竊取控制台(這可能不適用於所有瀏覽器):

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

演示: http://jsfiddle.net/jcG7E/2

編輯(2017-04-08):此建議已過時,在 Firefox 52 和 Chrome 57 console中不再在 window 原型上定義,刪除它會真正刪除它。


至少用 Firefox 和 Chrome 定義的console object ,你可以簡單地刪除覆蓋的屬性來恢復原來的:

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

這就像console屬性是在window object 的原型上定義的一樣 - 除了它不是,瀏覽器在這里做了一些魔術。

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;
    }

}

這是不可能的。 除非覆蓋它的人包含了一些撤消它的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM