恢复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");