【问题标题】:Chrome Developer Tools pauses the initialization of jQuery 1.7Chrome 开发者工具暂停 jQuery 1.7 的初始化
【发布时间】:2012-01-14 00:50:00
【问题描述】:

Chrome 的开发者工具是一组我喜欢使用的优秀工具。不幸的是,我最近在刷新页面同时保持开发人员工具窗口打开时遇到了一个非常奇怪的问题:Chrome 暂停 javascript 执行并指向下面指定的行。

try {
        // This should fail with an exception
        // Gecko does not error, returns false instead
        matches.call(document.documentElement, "[test!='']:sizzle"); // this is where it breaks

} catch (pseudoError) {
    pseudoWorks = true;
}

尽管异常本身位于 try-catch 块中,但异常会导致脚本暂停。有什么办法可以改变这种行为?还是我错过了什么?

【问题讨论】:

  • 发生这种情况的一个常见情况是:在 jQuery 中的任何时候,当您在不可见的元素上测试 .is(':visible') 时。在 Chrome 中,字符串 ':visible' 会抛出(捕获的、安全的、没问题的)DOMException Error: An invalid or illegal string was specified。代码仍然可以正常工作,但是如果您将暂停按钮设置为蓝色(“暂停所有异常”),它将启动调试器。

标签: javascript jquery google-chrome google-chrome-devtools


【解决方案1】:

我刚刚解决了这个问题(就我而言,可能会有所不同)。 我不小心点击了 chrome 控制台中的“暂停异常”按钮。 这个:https://developers.google.com/chrome-developer-tools/docs/scripts-breakpoints#js_exceptions

这里是那个小而容易错过的例外暂停按钮的位置,以及它的三个切换状态:

【讨论】:

  • 这为我解决了这个问题,并且已经让我发疯了一个星期。我什至卸载/重新安装了 Chrome 无济于事。谢谢。
  • 但是很多时候你希望它能够捕获你的 OWN 异常。
  • 圣主。我不得不下载 jQuery 的未缩小版本来找出谷歌的内容,偶然发现这个 SO 帖子,找出异常暂停被意外打开。谢谢!
  • 与 Safari 类似,这里的“断点”>“所有例外”将有一个深蓝色箭头。点击它使其变成浅蓝色。
【解决方案2】:

可能这是一个已知的错误,请检查:http://bugs.jquery.com/ticket/7535。我在那里找到了这个解决方案,希望对您有所帮助:

 try {
// This should fail with an exception
// Gecko does not error, returns false instead
// <orig. $jquery-1.5:>
// matches.call( document.documentElement, "[test!='']:sizzle" );
// <proposal to Ticket #7535, 2011-03-24:>
  if( ! html.mozMatchesSelector || document.currentScript ){
    matches.call( html, "[test!='']:sizzle" );
  }
//else{
// /*FF lt 4*/
//}


} catch( pseudoError ) {
    pseudoWorks = true;
  }
  // <testing only>
  // alert('MalformedSelectorException thrown: ' + pseudoWorks );

【讨论】:

  • 谢谢!尽管 jQuery 似乎正在尝试与 Sizzle 进行互操作性,因此导致了我们观察到的这些问题。我会硬着头皮在开发过程中集成 Sizzle,然后在投入生产之前将其丢弃。
【解决方案3】:

如果有人搜索

div.querySelectorAll("*,:x");

应该重定向到这里。

【讨论】:

  • 我 +1 只是为了支持您的搜索引擎可见性工作,但我强烈建议您发布完整的答案,描述此问题与您提供的代码的具体问题之间的关系以及适当的分辨率。否则这个答案很可能很快就会被删除。
【解决方案4】:

如果您使用的是 Chrome,请执行以下操作:

单击检查器中的设置图标(齿轮)。一般来说,有一个按钮叫做“Manage framework blackboxing...”

您可以使用它来忽略在调试器中评估某些脚本。这是一个简单的正则表达式来捕捉 jQuery 的东西。 /jquery(.*)\.js$

【讨论】:

  • 谢谢!救了我这么多,因为 babel 的 polyfill 会抛出大量异常,所以调试你自己的 babeld 应用程序变得非常困难。提示:在较新的 chrome 中,您可以在 F12 窗口右上角的三个点下找到此设置,然后设置 --> Blackboxing。
【解决方案5】:

发现这个问题正在寻找与 Safari 相关的问题,所以我想答案可能有用:

在 Safari Web Inspector 中,这可以通过转到 Breakpoints 选项卡 (ctrl-7) 来实现。取消选择“所有异常”并选择“所有未捕获的异常”。

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2015-12-11
    相关资源
    最近更新 更多