7

今のところ、ASP.net Webページ(実際にはSite.Masterファイル)にjQuery(1.9.1ですが、古い1.8.3は同じように動作します)を含めています。IE9 / Win7-64での実行はすべて正常に機能しましたが、IE10(引き続きWin7-64)にアップグレードしてから、Webページをローカルで実行し、Internet Explorerを選択して、Visual Studio内から実行すると、例外が発生しました。

例外は、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は、Windows7上のIE10を適切に処理していないようです。Opera10-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 );
    });

エラーの1つは次のとおりです。

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");

誰か考えがありますか?

4

3 に答える 3

17

jQuery チームは、ロジック フローの特定の状況で例外を使用します。WinJS アプリで同じ問題を報告したこのバグを参照してください: http://bugs.jquery.com/ticket/14123

例外が処理されるため、問題とは見なされません。「break on throw」を設定しないと、アプリのデバッグが難しくなるため、そうします。

それで、それが問題です。それについてあなたができることは何もありません。

于 2013-07-11T12:25:46.407 に答える
1

メッセージ以外に何か問題がありますか?コメントが言うように、「これは例外で失敗するはずです」。例外はassert()メソッドによって処理され、プログラムを終了させるべきではありません。Visual Studioには、未処理の例外のみを表示するオプションが必要です。

詳細情報:このページでは、Visual Studioで「JavaScriptファーストチャンス例外」設定を見つける方法について説明します。これをオフにすると、表示されているものが削除されます。promiseをデバッグしている場合は、オフにしたくない場合があることに注意してください。リンクの記事でさらに詳しく説明しています。ただし、この場合、jQueryは例外を適切に処理していると思います。デバッガーで実行していない場合は、メッセージは表示されません。

于 2013-03-05T04:19:03.473 に答える