它被覆蓋後可能以某種方式訪問console.log嗎?覆蓋後訪問window.console
window.console = { log: function (msg) { alert(msg); }, /* etc... */ };
是否有可能重新獲得原始的console.log功能?
它被覆蓋後可能以某種方式訪問console.log嗎?覆蓋後訪問window.console
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;
@Downvoter:爲什麼downvote? –
下面的答案(刪除window.console)更有用。我會說它應該是這個問題的接受答案。 – noah
@RocketHazmat從iframe中竊取控制檯的想法是相當不錯的破解! –
這是不可能的。除非誰重寫了它,否則包含一些代碼來撤消它。
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;
}
}
編輯(2017年4月8日):這個建議是過時的,在Firefox 52和Chrome 57 console
窗口原型不再定義並刪除它真的會刪除它。
至少與Firefox和Chrome中定義的console
對象,你可以簡單地刪除重寫的屬性,以恢復原來的一個:
window.console = {};
delete window.console;
window.console.log("This works!");
這工作,就好像console
性能進行的定義window
對象的原型 - 除了它不是,瀏覽器在這裏做了一些魔術。
這似乎不適用於最新版本的Chrome。 – RelaXNow
@RelaXNow:的確,這個建議過期了。我添加了一個註釋。 –
什麼是原件?螢火蟲? –