在一个实时网站上,我以前更改了Console.log为:
var console = {};
console.log = function () {};
在此代码始终执行的情况下,是否有可能在此代码之后恢复控制台功能,如果是,则如何? 由于网站是直播的,因此需要
。但是我需要进一步开发,而无需对实时网站进行任何更新。没有控制台记录/信息很难。
console
在
window
上,您可以参考
window.console.log
,例如::
(() => {
var console = {};
console.log = window.console.log;
console.log('foo');
// or, just reference window:
window.console.log('bar');
})();
如果代码在顶级运行,并且您使用的是
const
或let
(而不是ES5var
),则可以做同样的事情:
const console = {};
console.log = window.console.log;
console.log('foo');
,否则,您必须保存对
console.log
的引用,然后再重新分配使用console
::
var
但是,除非绝对必要,否则创建/覆盖内置的全局变量可能不是一个好主意 - 第一个摘要中的IIFE可能是可取的。
var log = console.log;
var console = {};
console.log = log;
log('foo');
因此,当您需要将控制台重置为正常功能时,您只需:
var oldConsole = window.console;
var console = {};
您要么备份上述参考,然后可以使用其功能或还原原始控制台
console = oldConsole.log; // since it's 'window.console.log'
console.log('Hello, world!'); // this output will now display on devtools with its default configuration
var backupConsole = console;
您可以创建新的iframe Enviroment并从中使用
console = {}
但这只是对iFrame控制台的引用,而不是实际丢失的原始控制台。只要您删除iframe
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
console = iframe.contentWindow.console; // magic happens there
console.log("🧃");
P.S。自2022年8月24日评论以来,我已经调查了此案!