它被覆盖后可能以某种方式访问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:的确,这个建议过期了。我添加了一个注释。 –
什么是原件?萤火虫? –