【问题标题】:Javascript best practice: handling Firebug-specific codeJavascript 最佳实践:处理特定于 Firebug 的代码
【发布时间】:2010-05-24 00:05:49
【问题描述】:

Firebug 无疑是一个很棒的 javascript 调试工具;我广泛使用 console.log()。

我想知道是否可以将特定于 Firebug 的代码留在生产环境中。 最佳做法是什么?评论调试代码?

【问题讨论】:

    标签: javascript jquery firebug


    【解决方案1】:

    如果您在生产代码中保留 console.log() 调用,那么使用 Internet Explorer 访问该站点的人将遇到 JavaScript 错误。如果这些人配置了额外的调试工具,那么他们会看到令人讨厌的对话框或弹出窗口。

    快速搜索发现此线程讨论了检测 Firebug 控制台是否存在的方法:http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

    【讨论】:

      【解决方案2】:

      以前被这个咬过。理想情况下,所有 console.log 语句都需要在生产之前删除,但这很容易出错,开发人员总是忘记或只在 FF + Firebug 中进行测试。

      一个可能的解决方案是创建一个虚拟控制台对象(如果尚未定义)。

      if( typeof window.console == 'undefined'){
          window.console = {
              log:function(){}
          };
      }
      

      请注意:Safari 在 10.4 上的情况是,任何对 console.log 的调用都会引发安全异常,因为控制台对象是 Mac OS 仪表板小部件中使用的保留对象。不确定是否是这种情况,今晚会检查。

      【讨论】:

      • 最新的 10.5 版本的 Safari 实际上在其 Web 开发工具中使用了 console.log() API,因此如果您支持最新版本,这可能不是问题。
      • 很公平,认为他们不会让它损坏太久
      【解决方案3】:

      前段时间我个人修改了我的压缩器以去除控制台引用预压缩。在那里添加一个正则表达式只需几分钟就可以节省一生的麻烦。

      【讨论】:

      • 一般来说这是危险的,因为这会将代码视为 text 而不是代码,因此var a = console;a.log("test"); 仍然会抛出错误。当然,这样的参考不太可能,但由于存在更好的解决方案(见上文),这样做似乎是不明智的。
      【解决方案4】:

      只是想我会为任何 js 调试添加一个非常好的技巧......使用关键字“调试器”,它就像代码中的断点,firebug 也检测到它 MSIE(如果你有 Visual Studio)检测到它正如我所说,它是一个断点。

      似乎没有多少人知道这一点,但我发现它非常宝贵……如果运行代码的机器上没有安装调试器,则不会发生任何事情并且代码运行良好。虽然我不建议把它们留在里面。

      【讨论】:

        【解决方案5】:

        我为此头疼过很多次。

        我经常使用console.log(),直到最近才发现它会导致整个JS代码在不使用firebug的FF版本中失败。

        我通常在上线前运行查找,然后将其注释掉。

        D

        【讨论】:

          【解决方案6】:

          一些压缩器会去掉任何前缀为 ;;; 的行。 (这是一个合法的序列,是三个空语句。)这样你就不会严格限于控制台引用(即你可以做一些计算,然后 console.log() 最后的结果,压缩器可以把它们都去掉。)我为此使用JavaScript::Minifier

          【讨论】:

            【解决方案7】:

            我在 OOP Javascript 中使用它,为检查 firebug 是否存在的日志制作自己的包装器:

            myclass.prototype.log = function()
            { 
                if( typeof window.console != 'undefined' )
                {
                    console.log.apply( null, arguments ); 
                }
            }
            

            只需调用:

            this.log( arg1, arg2, ...)
            

            【讨论】:

              【解决方案8】:

              提醒一下,IE 开发工具不支持 console.log 上的 apply()。

              当开发工具处于活动状态时,调用 console.log.apply() 将在 IE8 中引发异常。

              【讨论】:

                【解决方案9】:

                你可以试试JavaScript Debug,它是console.log的简单包装器 http://benalman.com/projects/javascript-debug-console-log/

                【讨论】:

                  猜你喜欢
                  • 2011-06-25
                  • 2015-12-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-25
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多