【问题标题】:finding out if console is available找出控制台是否可用
【发布时间】:2011-02-09 14:37:25
【问题描述】:

我想知道,我如何使用 javascript 找出控制台对象是否可用?

我有一个问题,如果我忘记删除像 console.log('sthg') 这样的调试输出,我会在几个浏览器中出错,如果没有萤火虫或类似的活动。

感谢帮助

在该问题旁边,我对有关控制台对象的所有信息感兴趣。有人有一些文档链接吗?这是一个标准吗?等等……

【问题讨论】:

    标签: javascript debugging


    【解决方案1】:

    检查属性是否作为window的成员存在:

    if (window.console) {
    }
    

    在该问题旁边,我对有关控制台对象的所有信息感兴趣。有人有一些文档链接吗?这是一个标准吗?等等……

    查看Firebug documentation for the Console API; Chrome 和 Safari 实现了其中列出的大部分方法,但不是全部。没有标准定义控制台中应该包含什么,因此您需要测试每个浏览器以查看它是否支持该功能。

    【讨论】:

    • chrome 和 IE 控制台呢? :-)
    • @helle:就像我说的,Chrome 实现了大部分 Firebug 控制台 API 方法。 IE 实现了一些基本的,如warnerrorinfo 等,但它并没有全部实现,而且似乎没有文档列表,所以你必须尝试它们自己。
    • @AndyE 你能解释一下为什么检查窗口中存在的属性不如使用 typeof 强大吗?为什么我们不应该像其他答案一样直接检查 windows.console 变量,甚至只检查全局控制台?
    • @matpop:在 window.console 之前编写的脚本可能会意外地用名为 console 的全局变量覆盖该变量。现在这种情况不太可能发生,所以我编辑了我的帖子以简化答案。
    【解决方案2】:

    安全输出到控制台的简单而简短的方法如下:

    window.console && console.log('Debug message');
    

    【讨论】:

    • 我认为这不是很好,因为有人可能已经覆盖了控制台并且 .log 不存在。您还应该检查 .log 是否存在并且确实是一个函数。
    【解决方案3】:

    这是我使用的。请记住,我只是半心半意地支持不支持控制台的浏览器。我只使用过console.log(),但你可以看到它是如何扩展来支持console.dir()、console.info()等的

    var console = console || {
        "log": function(stuff) {}
    };
    

    我喜欢它,因为调用它不会导致错误,但它返回 [undefined],我认为这是合适的。

    请注意,在我们之前(和之后)有很多人编写过类似的 polyfill:

    https://gist.github.com/search?q=console+%7C%7C+console

    【讨论】:

    • +1 因为我认为这是个好主意。 Andy E 的回答完全符合要求,所以他仍然有正确的答案。
    • 同意。这与其说是直接回答,不如说是旁白。我很高兴你喜欢它
    • 值得一提的是,它确实有效,因为 var 指令实际上是在 代码执行之前处理的。
    【解决方案4】:

    firebug、IE8(需要用F12打开开发者工具)、Chrome等定义,但没有定义它的规范。 console.log wrapper 使它成为一个非常易于使用的跨浏览器日志记录解决方案,因此如果控制台不存在,您的代码不会爆炸。

    【讨论】:

    • 这就是我想推荐但想不出名字的东西!很高兴知道有人发现了它。
    • chrome 和 IE 控制台呢? :-)
    • @helle 是的,我猜 IE8 现在确实添加了一个控制台,并且没有考虑 Chrome。谢谢。
    【解决方案5】:
    try{
    console.log("test")
    }
    catch(e){
    console={},
    console.log=function(a){}
    }
    

    只要把它放在你的 JS 文件的顶部,然后使用 console.log();不用担心浏览器错误,我在 IE9 中也有这个错误

    【讨论】:

    • 有趣的解决方案。我通常不喜欢使用异常来处理流程,但这可能真的很方便。
    【解决方案6】:

    在加载其他内容之前,我总是将其包含在 HTML 标题的顶部。用 console.debug 调试对我来说太长了。而且我喜欢切换这些控制台功能的使用。

    不知道代码优化到什么程度,但它总能胜任。

    (function() {
        var consoleDisabled = false;
        if (consoleDisabled) {
            window.console = undefined;
        }
        if (window.console == undefined) {
            window.console = {
                debug: function() {
                    return true;
                },
                info: function() {
                    return false;
                },
                warn: function() {
                    return false;
                },
                log: function() {
                    return false;
                }
            }
        }
        debug = (function(args) {
            window.console.debug(args);
        });
        info = (function(args) {
            window.console.info(args);
        });
        warn = (function(args) {
            window.console.warn(args);
        });
        log = (function(args) {
            window.console.log(args);
        });
    })();
    debug(somevar);
    info(somevar);
    warn(somevar);
    log(somevar);
    

    【讨论】:

      【解决方案7】:

      最简单的方法是:

      if (window.console){
         console.log('do something');
      }
      

      而不仅仅是写:

      console.log('do something');
      

      【讨论】:

        【解决方案8】:

        也许……

        if (console) {
            // do stuff
        }
        

        【讨论】:

        • 这会在未定义 console 的浏览器中引发错误。
        猜你喜欢
        • 2011-08-26
        • 1970-01-01
        • 2016-07-01
        • 2020-03-06
        • 1970-01-01
        • 2011-12-15
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多