【问题标题】:Can Firebug be required to run my website?可以要求 Firebug 来运行我的网站吗?
【发布时间】:2010-11-27 15:03:03
【问题描述】:

我正在开发一个包含一些复杂 javascript 的新项目。我不能发布任何代码,所以这不是我的问题。

我有一个在Firefox 3.0 中工作的脚本。有人指出该脚本在Firefox 3.5 中不起作用,因此我正在尝试使其起作用。确实该脚本没有产生预期的结果,所以我安装了最新版本的Firebug,启用了console 并刷新了页面。

哇,它奏效了。

没有错误,没有警告。

所以我禁用了控制台,然后它就不再工作了......

这是怎么回事? Firebug 控制台以某种方式更改了 Firefox 中的某些内容,使我的脚本工作?对下一步有何建议?(除了要求未来的访问者安装 Firebug...)

【问题讨论】:

    标签: javascript error-handling firebug firefox3.5


    【解决方案1】:

    在我看来,您可能遇到线程问题,FireBug 正在分析并可能减慢其中一个线程,以便在解决下一步之前有时间完成。

    您是否可能正在使用 ajax,并且正在等待响应?或者您可能在加载依赖于 DOM 中其他内容的对象时或之后执行某些操作?

    更新: 对于那些偶然发现这一点的人来说,JavaScript 中的“线程”实际上只存在于抽象中(网络工作者等)。我误用了这个词。我真的在想一个异步操作,它在另一个操作准备好之前返回。

    【讨论】:

    • 这是有道理的,因为 firefox 的 javascript 引擎似乎在每个版本中都变得更快。
    • 我正在使用 ajax 是的,但我认为 Justin 对 console.log() 的看法是正确的 :)
    • 在您使用 Ajax 时检查它是个好主意。我曾经在 Google Maps 中使用 AJAX 时遇到过类似的问题,我在其中提醒了变量是什么,并且以某种方式神奇地修复了代码。 Multiple Bald Spots 后来,当警报窗口打开时,结果发现,冻结了下一步,它有时间加载并修复了我的线程问题。
    • Javascript 没有线程,是吗?您可以拥有稍后执行的异步代码,但它仍然不是多线程的。
    • Javascript 不使用传统意义上的“线程”,除非您通过 xhmtlrequest 之外的提取指定它们,通过 ajaxian.com/archives/multi-threaded-javascript 但异步加载问题在概念上是相似的。所以更具体地说,在这种情况下可能是一个“时间”问题。
    【解决方案2】:

    这可能是因为忘记在您的 javascript 中某处对 console.log() 的调用进行评论这样简单吗?

    如果您有挂起的引用,并且用户没有安装 Firebug,您将收到一个运行时错误,该错误将停止脚本的执行。

    【讨论】:

    • 是的,这听起来也很有可能。我想了一会儿,但假设因为你一开始没有安装 firebug,所以它不会在那里,但是在阅读了这个答案之后,我意识到如果你复制和粘贴代码,那么很有可能会在那里进行一些调试。 +1
    • 我不知道,我不得不怀疑开发人员是否能够识别出如此明显的错误。
    • 我正在阅读它,同时我感觉自己很愚蠢:)。但是 Mushex 首先回答什么...
    • 这也发生在我身上。如果console 不可用,console.log 将破坏一切,这在大多数浏览器中都是如此。
    【解决方案3】:

    检查您的代码是否有 console.log()、console.debug()。如果控制台未定义(如预期的那样),调用 window.console 对象方法会引发错误。

    在大多数情况下,您可以轻松删除或评论这些行。

    【讨论】:

    • @ropstah 这并不重要……但请检查您的数学。这是最后一个答案,不是第一个。
    • 哎呀,你说得对,我在阅读 Mushex 的“8 分钟前”和你的“9 分钟前”贾斯汀时确实受到了影响...... :)
    • 另一个好主意是在你的javascript中包含firebugx.js,它会在窗口中添加一个假的控制台对象,忽略你所有的console.log调用。
    【解决方案4】:

    我为 firebug 编写了一个简单的包装器(我只使用调试,但它应该为您提供复制其他方法所需的内容)仅在控制台存在时写入,因此我可以使用 firebug,不需要去评论出我的调试语句,它不会破坏没有它的人的网站。

    如果你使用这个代码然后使用 fbconsole.debug 而不是 console.debug 你永远不会遇到这个问题:

    function fbconsole () {
        this.debug = function (val) {
            if(typeof(console) !== 'undefined' && console != null) {
                console.debug(val);
                }
            }
        }
    var fbconsole = new fbconsole();
    

    【讨论】:

    • 很好,但我认为最好在任何东西上线之前删除调试语句:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2015-07-03
    • 2010-12-03
    • 2016-11-07
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多