【问题标题】:Stop suppressing JavaScript errors停止抑制 JavaScript 错误
【发布时间】:2016-08-30 09:57:04
【问题描述】:

我正在使用 Firebug 查看 JavaScript 错误。但我也在使用 jQuery。出于某种原因,我在使用 jQuery 时从未看到过 JavaScript 错误,而这是最初使用 jQuery 时遇到的最大问题之一。

没有要显示的特定代码,想象一下alert(areareg);,其中areareg 未定义或任何类型的JavaScript 错误,Firebug 不会告诉我。 JavaScript 将在没有任何警告或通知的情况下简单地失败。在我使用 jQuery 的任何项目中总是如此,这是我不喜欢 jQuery 的唯一原因;因为出了问题时很难调试。

出于某种原因,我什至在网上找不到这个问题,更不用说回答了。但我想我会在这里尝试一下:

  1. 有什么方法可以让 jQuery 停止抑制错误消息?
  2. 我是世界上唯一一个对 jQuery 一直有这个问题的人吗?

编辑: 我同时使用 Firefox(带有 Firebug)和 Chrome,而且我只使用 jQuery 的非缩小版本。尽管如此,在我使用 jQuery 时,我一生中从未见过任何类型的 jQuery 错误消息,既无用也无用,实际上也不是正常的 JavaScript 错误。

【问题讨论】:

  • 大多数方法,如 hide , show 等都负责空检查,即使我们没有那个 id 或 class 它也不会抛出错误,出于调试目的,它很难找到.
  • 您所描述的错误不会由 jQuery 处理,并且应该显示在 Firebug 和其他 Web 控制台中。 javascript chat room 中的一些人提到最近版本的 Firebug 没有正确报告错误。也许这是相关的 - 尝试在其他浏览器(例如 Chrome)中调试一段时间。
  • @andy E,我非常同意你的观点,我最近更新了 firebug,遇到了同样的问题,我必须点击错误,警告窗口来检查错误。
  • 好吧,我的问题是它根本没有报告错误。甚至连名字都乱码的垃圾内存地址也不行;这不仅仅发生在一个地方,我已经在多个不同地方的多个不同操作系统上使用了 jQuery,到目前为止,我一生中从未见过任何类型的 jQuery 错误消息,既无用也无用,也没有警告,也没有任何可以通过的东西。当事情没有按预期工作时,就这么简单,我花了很多时间试图弄清楚事情,却不知道出了什么问题。说真的,我是唯一一个经历过这种情况的人吗?

标签: javascript jquery firebug


【解决方案1】:

好吧,尽管您有这样的印象,jQuery 本身并没有做任何事情来“抑制”错误消息。现在,Firefox 确实倾向于丢弃某些类型的异常,尤其是像您所描述的那样。我经常发现,如果发生异常,将整个 Javascript 块包装在 try ... catch 中并发出警报调用是一种有用的处理方法,但它仍然很烦人。

【讨论】:

    【解决方案2】:

    我使用谷歌浏览器进行调试,它非常好,它也显示了所有 jquery 错误(正如 Alfred 所说,如果你使用缩小版,你的错误中不会有任何有意义的名称,所以最好使用原始来源)

    【讨论】:

    • 我还没有意识到 Google Chrome 调试工具是多么的棒。我正在为 Chrome 使用一些残缺的 Firebug 版本。 :) 谷歌又赢了!谢谢!
    【解决方案3】:

    我在 FF 18 中遇到了同样的问题。我正在使用 JSF 和 JQuery,尽管即使页面上的纯 JS 代码也会发生这种情况。我故意将应该在 Firebug 中引发语法错误的 JavaScript 代码一言不发。 FF 18 有自己的内置控制台,看起来类似于萤火虫。当我禁用 firebug 插件时,console.log 消息开始出现。但是,错误仍然没有出现。我刚刚尝试了 Chrome,并且确实出现了错误。

    【讨论】:

      【解决方案4】:

      我已经多次遇到这个问题。它非常不一致且难以复制,有时似乎与版本问题有关。设置似乎很少会产生影响,尽管“Break on next”有时(并非总是)会识别出可能会漏掉的错误。

      我注意到的一件事是,它往往发生在回调函数内部触发的代码上,例如来自 UI 事件或来自 AJAX 调用。有时 Firefox / Firebug 会像其他浏览器一样运行并在控制台中显示错误,有时它甚至对于非常明确的情况也一无所获,例如:

      console.log('something'); // Shows up in console fine
      fail  // Other browsers give undefined variable error, Firefox gives nothing
      console.log('something else'); // Never reached, so silent error clearly happens
      

      我发现的最佳方法是:

      • 一旦你发现了一个不显示的错误,使用console.trace() 继续工作,直到你到达一个点,在函数内部,错误被隐藏,在外部,它显示,添加一些代码 sn-p 像:

         console.trace();
         fail // cause the error, look out for a trace followed by nothing
        
      • 如果是 AJAX 调用,请手动添加基本错误处理程序,因为由于某种原因 Firefox/Firebug 正在失去默认值:

         $.ajax({
           error: function(a,b,c){
             throw c;
           }, 
           other: '...settings'
         }
        
        • 如果它是您无法添加错误处理函数的东西,请将其包装在 try...catch 中,例如:
         try {
           // whatever the code is within which there are no errors
         } catch( err ){
           throw err;
         }
        

      这应该足以捕获所有错误,无论它们在 Firefox 丢失它们的范围内。但请注意在回调中有回调的情况,您可能需要这样做两次...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多