Возможно ли каким-то образом получить доступ к console.log после его перезаписывания?
window.console = { log: function (msg) { alert(msg); }, /* etc... */ };
Можно ли восстановить исходную функциональность console.log?
Возможно ли каким-то образом получить доступ к 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
больше не определен в прототипе окна, и удаление его действительно удалит.
По крайней мере, с объектом console
, определенным Firefox и Chrome, вы можете просто удалить перезаписанное свойство, чтобы восстановить исходное:
window.console = {};
delete window.console;
window.console.log("This works!");
Это работает так, как будто свойство console
было определено в прототипе объекта window
- за исключением того, что это не так, браузеры здесь делают магию.
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;
}
}
Это невозможно. За исключением того, что тот, кто его перезаписал, включил некоторый код, чтобы отменить его.