恢复console.log()

出于某种原因, Magento附带的原型框架(或其他JavaScript代码)正在取代标准的控制台function,所以我无法debugging任何东西。 在JavaScript控制台console写下我得到以下输出:

 > console Object assert: function () {} count: function () {} debug: function () {} dir: function () {} dirxml: function () {} error: function () {} group: function () {} groupEnd: function () {} info: function () {} log: function () {} profile: function () {} profileEnd: function () {} time: function () {} timeEnd: function () {} trace: function () {} warn: function () {} 

我在Linux上使用Google Chrome version 13.0.782.112

Prototype JavaScript framework, version 1.6.0.3

有一个快速的方法来解决这个问题吗?

例如,

 delete console.log 

还会还原console.log

 console.log = null; console.log; // null delete console.log; console.log; // function log() { [native code] } 

由于原始控制台在window.console对象中,请尝试从iframe恢复window.console

 var i = document.createElement('iframe'); i.style.display = 'none'; document.body.appendChild(i); window.console = i.contentWindow.console; i.parentNode.removeChild(i); 

适用于Chrome 14上的我。

Magento在/js/varien/js.js有以下代码 – 注释掉它,它会工作。

 if (!("console" in window) || !("firebug" in console)) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {} } 

delete window.console恢复在Firefox和Chrome原始的console对象。

这个怎么用? window是一个托pipe对象,通常它是在所有实例(浏览器中有许多选项卡)之间通用的原型实现的。

外部库/框架(或Firebug等)的一些愚蠢的开发人员重写window实例的属性控制台,但它不会损坏window.prototype 。 通过delete操作符,我们可以从console.*派发。

将原始console的引用保存在脚本开始的variables中,然后使用此引用或重新定义console以指向捕获的值。

例:

 var c = window.console; window.console = { log :function(str) { alert(str); } } // alerts hello console.log("hello"); // logs to the console c.log("hello");