[英]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;
編輯(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.