7

Tôi đang ở thời điểm này chỉ bao gồm jQuery (1.9.1, nhưng cũ 1.8.3 hoạt động theo cách tương tự) trong trang web ASP.net của tôi (tệp Site.Master thực sự). Mọi thứ hoạt động tốt dưới IE9/Win7-64 nhưng kể từ khi tôi nâng cấp lên IE10 (vẫn còn Win7-64), bây giờ khi tôi chạy trang web cục bộ, chọn Internet Explorer và chạy từ bên trong Visual Studio, tôi nhấn một ngoại lệ.Chạy jQuery bị lỗi trên IE10/Win7

Ngoại lệ là trên dòng 4224 của tệp jquery-1.9.1.js.

// 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, cả cũ và mới, dường như không xử lý IE10 trên Windows 7 đúng cách. Tôi gặp tai nạn ở Opera 10-11, điều này thật thú vị.

Tôi cũng thấy một vụ tai nạn trên 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); 
    }); 

Đây là một trong các lỗi:

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

Bất kỳ ai có bất kỳ suy nghĩ?

+0

Ngoại lệ là gì? Dòng nào là dòng 4224 trong mã bạn đăng? –

+0

Tôi đã sao chép ngoại lệ từ hộp thoại vào câu hỏi của tôi, xem ở trên. –

+0

Theo nhóm jQuery, điều này là tốt, vì nó dự kiến. Họ bắt được ngoại lệ ở cấp độ cao hơn và tự xử lý nó. Lame, nhưng đó là tình huống –

Trả lời

17

nhóm jQuery sử dụng ngoại lệ trong một số trường hợp nhất định cho luồng logic. Xem lỗi này tôi đã đệ trình cho cùng một vấn đề với các ứng dụng WinJS: http://bugs.jquery.com/ticket/14123

vì xử lý ngoại lệ, chúng không coi đó là vấn đề. Tôi làm, vì nó làm cho việc gỡ lỗi ứng dụng trở nên khó khăn hơn mà không cần phải "phá vỡ ném".

Vì vậy, đó là vấn đề. Bạn không thể làm gì nữa đâu.

+0

Cảm ơn bạn đã bình luận mới. Buồn, nhưng gỡ lỗi ứng dụng web .Net của tôi khó hơn nhiều. –

+0

Có bạn đi, năm sau tôi gặp rắc rối tương tự, tôi đã thử tất cả các bạn nói, vẫn không có thay đổi. Phải làm gì? Hãy giúp tôi! –

1

Khác với thông báo, có vấn đề gì không? Như bình luận nói, "Điều này sẽ thất bại với một ngoại lệ." Ngoại lệ được xử lý theo phương pháp assert() và không được khiến chương trình chấm dứt. Nên có một tùy chọn trong Visual Studio để chỉ hiển thị ngoại lệ chưa được xử lý.

Thông tin thêm: This page mô tả cách tìm cài đặt "ngoại lệ cơ hội đầu tiên JavaScript" trong Visual Studio, tắt tính năng này sẽ loại bỏ những gì bạn đang thấy. Lưu ý rằng bạn có thể không muốn tắt nó nếu bạn đang gỡ lỗi các lời hứa, bài viết trong liên kết sẽ thảo luận thêm về nó. Nhưng tôi tin rằng jQuery đang xử lý ngoại lệ đúng trong trường hợp này và bạn sẽ không thấy thông báo nếu bạn không chạy trong trình gỡ lỗi.

0

Tôi gặp phải sự cố rất giống nhau trong Safari trên Windows 7 khi trình gỡ rối được đặt để ngắt các lỗi không bị bẫy. Vấn đề dường như là trình gỡ lỗi dự kiến ​​bắt (e) xảy ra trong cùng một chức năng. Nếu bạn tiếp tục tuyên bố thực hiện bằng câu lệnh bắt (e) không chọn lỗi hoàn toàn sau này trong hàm assert():

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

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

Bực bội, huh !?