7

我遇到过几次,没有解释。网站上没有 JS 错误。代码确实正在执行。用工作代替它们alert()就好了。

所以今天又发生了这种情况,所以我尝试检查控制台对象中的控制台对象,发现一些异常情况,好像有什么东西覆盖了控制台对象。

以下屏幕截图是我遇到此问题的站点(站点 A):

http://ompldr.org/vZ256Mw/Selection_004.jpg

你看到日志、警告和信息是空函数了吗?并且控制台对象与控制台工作正常的站点(站点 B)上的不同(屏幕截图如下)?

http://ompldr.org/vZ256Mg/Selection_003.jpg

现在在两个站点上运行的代码完全相同。站点 B 是我的本地安装,站点 A 正在暂存,我的代码中没有任何内容会覆盖控制台对象,那么这种行为的解释是什么?


根据 nfroidure 的建议,我在 head 部分中添加了该代码,然后得到了这个:uncaught error! (anonymous function) (anonymous function),其中第二个指向另一个库文件中的代码,其中包含以下内容:

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() {}
}

这是负责任的,因为我认为 if 检查有问题。"console" in window在 Chrome中将"firebug" in window是对的,对我来说将是错误的,从而导致替换控制台方法。它应该&&在那里,不是吗?

更新:在将操作员更改为之后,&&它开始在站点 A 上工作,但我不明白为什么它只会在一个而不是另一个上触发。

4

2 回答 2

1

看起来站点 A 包含了 firebug,因为控制台的方法看起来很像这里的方法:http: //getfirebug.com/wiki/index.php/Console_API

于 2012-12-12T16:50:28.423 回答
1

尝试将其添加到文档顶部:

<script>
(function(){
    var wc=window.console;
    delete window.console;
    window.__defineGetter__("console", function(){
        return wc;
        });

    window.__defineSetter__("console", function(val){
        throw('error!');  // Look at js stack when throwed
        });
})();
</script>
于 2012-12-12T16:50:41.177 回答