Javascript 覆盖后访问window.console
是否可以在覆盖console.log后以某种方式访问它Javascript 覆盖后访问window.console,javascript,console,Javascript,Console,是否可以在覆盖console.log后以某种方式访问它 window.console = { log: function (msg) { alert(msg); }, /* etc... */ }; 是否可以恢复原始的console.log功能?您可以在覆盖控制台之前对其进行备份 var oldConsole = window.console; window.console = { log:function(msg){alert(msg)} //...}; 然后可以使用oldConsole变
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 customLog={
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;
}
}
原始日志:“”,
日志:函数(){
//创建要显示的字符串
var displaystring='';
for(var i=0,len=arguments.length;i
编辑(2017-04-08):这个建议已经过时,在Firefox 52和Chrome 57控制台中不再在窗口原型上定义,删除它将真正删除它
至少通过Firefox和Chrome定义的控制台
对象,您可以简单地删除Overwrited属性以恢复原始属性:
window.console = {};
delete window.console;
window.console.log("This works!");
这就好像控制台
属性是在窗口
对象的原型上定义的一样-除了它不是,浏览器在这里发挥了一些魔力。什么是原始属性?Firebug?下面的答案(删除window.console)更有用。我认为这应该是这个问题的公认答案。@RocketHazmat从iframe中窃取控制台的想法是一个相当不错的黑客行为!iFrame的解决方案是史诗般的,正是我所需要的。谢谢这在最新版本的Chrome中似乎不起作用。@RelaXNow:确实,这个建议过期了。我在上面加了一条注释。
window.console = {};
delete window.console;
window.console.log("This works!");