console.log有时候不起作用

7
我遇到过这种情况多次,但是没有任何解释。网站上没有JS错误。代码确实在执行。用 alert() 替换它们可以正常工作。
所以今天又发生了这种情况,我试图在控制台对象中检查控制台对象,我发现一些不规则的地方,好像有什么东西覆盖了控制台对象。
以下是我遇到问题的网站(A站)的屏幕截图:

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

你看到log、warn和info是空函数吗?而且console对象与在另一个站点(站点B)上正常工作的情况不同(后面跟随截图)?

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

现在两个网站上运行的代码完全相同。B站是我的本地安装,A站是暂存环境,代码中没有任何覆盖控制台对象的内容,所以这种行为可能有什么解释?
根据nfroidure的建议,我在头部区域添加了该代码,然后出现了以下错误:未捕获的错误!(匿名函数)(匿名函数),其中第二个指向另一个库文件中的一段代码,其内容如下:
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 检查有误。在 Chrome 中,"console" in window 将为 true,而 "firebug" in window 将为 false,导致替换控制台方法。那里应该使用 &&,不是吗?
更新:将运算符更改为 && 后,它开始在 A 网站上运行,但我不明白为什么它只在一个网站上触发,而不是另一个。

你包含了哪些代码?是不是某些第三方代码导致了 console 的空值(null)? - Bergi
这是浏览器的 bug 吗?因为您说它只会偶尔发生。 - LPD
@Bergi 很多,但是当我在项目中运行 grep 'console' 命令时,jQuery 验证插件出现了,但即使如此,它也只是在使用对象之前检查它。 - Ashfame
或许是浏览器扩展正在干扰“控制台”?尝试禁用所有扩展程序。 - apsillers
1
可能尝试我在这里描述的调试策略:https://dev59.com/12Yr5IYBdhLWcg3w7eTb#13291928 - apsillers
显示剩余6条评论
2个回答

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>

在编程中,"top"是指在<html>标签之前或在<head>标签内的最前面吗? - Ashfame
在<head>标签内。我没有测试语法。 - nfroidure
尝试将以下代码替换为: if ((!("console" in window)) || !("firebug" in console)), 而不是 if (!("console" in window) || !("firebug" in console)) - nfroidure
是的,这让它工作了,但为什么它只在分期环境(SiteA)上触发,而不在本地环境(SiteB)上触发呢?有什么线索吗? - Ashfame
你能否编辑你的回答,包括代码的解释以及你如何达到这个点的说明? - Ashfame

1

抱歉,该网站没有添加Firebug。 - Ashfame
1
或者至少调用 FireBug lite 或一些浏览器扩展程序。看起来非常像是这样的,是的。 - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接