7

我现在只是在我的ASP.net网页(实际上是Site.Master文件)中包含了jQuery(1.9.1,但旧的1.8.3表现方式相同)。一切工作正常在IE9/Win7-64下运行,但自从我升级到IE10(仍然Win7-64),现在当我在本地运行网页,选择Internet Explorer并从Visual Studio中运行时,我遇到了异常。在IE10/Win7上运行jQuery崩溃

jquery-1.9.1.js文件的第4224行出现异常。

// Opera 10-12/IE8 - ^= $= *= and empty values 
// Should not select anything 
div.innerHTML = "<input type='hidden' i=''/>"; 
if (div.querySelectorAll("[i^='']").length) { 
    rbuggyQSA.push("[*^$]=" + whitespace + "*(?:\"\"|'')"); 
} 

// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 
// IE8 throws error here and will not see later tests 
if (!div.querySelectorAll(":enabled").length) { 
    rbuggyQSA.push(":enabled", ":disabled"); 
} 

// Opera 10-11 does not throw on post-comma invalid pseudos 
div.querySelectorAll("*,:x"); 
rbuggyQSA.push(",.*:"); 

旧的和新的jQuery似乎都无法正确处理Windows 7上的IE10。我在10-11剧院崩溃,这很有趣。

我也看到在4242

if ((support.matchesSelector = isNative((matches = docElem.matchesSelector || 
    docElem.mozMatchesSelector || 
    docElem.webkitMatchesSelector || 
    docElem.oMatchesSelector || 
    docElem.msMatchesSelector)))) { 

    assert(function(div) { 
     // Check to see if it's possible to do matchesSelector 
     // on a disconnected node (IE 9) 
     support.disconnectedMatch = matches.call(div, "div"); 

     // This should fail with an exception 
     // Gecko does not error, returns false instead 
     matches.call(div, "[s!='']:x"); 
     rbuggyMatches.push("!=", pseudos); 
    }); 

下面是错误的一个崩溃:

Exception was thrown at line 4224, column 4 in http://localhost:49928/jquery/jquery-1.9.1.js 
0x800a139e - JavaScript runtime error: SyntaxError 
Source line: div.querySelectorAll("*,:x"); 

任何人有什么想法?

+0

什么是例外?您发布的代码中哪一行是4224行? – 2013-02-28 20:36:32

+0

我将对话框中的异常复制到我的问题中,参见上文。 – 2013-02-28 21:08:04

+0

根据jQuery团队的说法,这很好,因为它是预期的。他们在更高层次上发现异常并自行处理。跛脚,但这是情况 – 2013-07-11 12:24:08

回答

17

jQuery团队在某些情况下为逻辑流程使用异常。 看到我为WinJS应用程序提出的相同问题提出的这个错误:http://bugs.jquery.com/ticket/14123

由于异常的处理,他们不认为这是一个问题。我这样做,因为它使调试应用程序的方式更难,没有“突破抛出”设置。

所以,这就是问题所在。你无能为力。

+0

感谢您的新评论。可悲的是,调试我的.Net网络应用程序要困难得多。 – 2013-07-11 23:46:13

+0

你走了,多年后,我遇到了同样的麻烦,我试过你所说的一切,仍然没有改变。该怎么办?请帮忙! – 2015-11-09 09:45:33

1

除了消息之外,是否有什么问题?正如评论所说,“这应该会失败,并有例外。”该异常由assert()方法处理,不应导致程序终止。在Visual Studio中应该有一个选项才能显示未处理的异常。

更多信息:This page描述如何在Visual Studio中找到“JavaScript第一次机会例外”设置,关闭它应该消除您所看到的内容。请注意,如果您正在调试promise,您可能不希望将其关闭,链接中的文章将对其进行进一步讨论。但我相信jQuery在这种情况下正确地处理异常,如果您没有在调试器中运行,您将看不到该消息。

0

当调试器被设置为在未捕获错误时中断时,我在Windows 7上的Safari中遇到了同样的问题。问题似乎是调试器期望捕获(e)发生在相同的函数中。如果通过语句继续执行语句捕获(五)不挑错误了非常清楚以后的断言()函数:

function assert(fn) { 
    var div = document.createElement("div"); 

    try { 
     return fn(div); 
    } catch (e) { 
     return false; 
    } finally { 
     // release memory in IE 
     div = null; 
    } 
} 

折腾,呵呵!?