2009-04-22 24 views
6

Trang web của tôi đang bị Operation Aborted error. Những gì tôi thấy lạ là trong trường hợp của tôi, lỗi đôi khi chỉ xảy ra. Trang web đã hoạt động tốt trong ba tháng rồi ngày nay nó bắt đầu xảy ra nhưng không phải lúc nào cũng vậy.Phát hiện nguyên nhân của hoạt động của IE Đã hủy bỏ sự cố

Trang này diễn ra khá lớn với rất nhiều kiểm soát của bên thứ ba. Những gì tôi muốn là một công cụ có thể xác định nơi xảy ra sự cố. Có vẻ như tốt nhất tôi có thể làm là tìm lỗi javascript đầu tiên xảy ra sau khi hoạt động bị hủy bỏ; tuy nhiên, điều này không giúp được gì nhiều. Thất bại này là bởi vì một phần tử của dom không có sẵn mà tôi mong đợi kể từ khi IE ngừng phân tích cú pháp HTML.

Bất kỳ ai có ý tưởng hay thủ thuật nào để thu hẹp điều này?

Chỉnh sửa

Tôi đánh giá cao các cách khác để giải quyết vấn đề; Tuy nhiên, những gì tôi đang tìm kiếm là một cách để xác định kịch bản nào đang gây ra sự cố.

cuối cùng Sửa

Sau khi chuyển sang IE8, tôi đã có thể xác định nguyên nhân là hộp thoại popup modal các AjaxControl Toolkit. Không có cách nào cụ thể để xác định điều này là dissapointing, nhưng trình gỡ lỗi cho tôi thấy nơi nó đã thất bại rất nhất quán. Vì không có cách nào trong điều khiển để cho nó di chuyển khởi tạo của nó, tôi vô hiệu hóa nó, và có kịch bản để tạo điều khiển phía máy khách trong trình xử lý sự kiện tải tài liệu của tôi.

Vấn đề này không phải là lỗi của kiểm soát, nó đã xảy ra vì nội dung cho cửa sổ bật lên thực sự ở dạng thứ hai. Thành thật mà nói, tôi ngạc nhiên khi nó làm việc.

+0

Báo cáo lỗi javascript của IE nổi tiếng là vô ích. Bạn có gặp bất kỳ lỗi nào trong Firefox không? – pkaeding

+0

không có gì trong firefox. – JoshBerke

Trả lời

3

Bạn có javascript nào đang thao tác DOM hay không, như trường hợp được mô tả tại http://support.microsoft.com/kb/927917#more_information?

Thử di chuyển tất cả các khối tập lệnh xuống cuối trang, ngay trước thẻ </body> và không cố gắng đặt thuộc tính innerHTML của thẻ body.

Nếu sự cố xảy ra với việc thực thi javascript trước khi DOM được xây dựng đầy đủ, hãy thử di chuyển bất kỳ lệnh gọi khởi tạo nào thành hàm sẽ chỉ chạy sau khi trang được tải hoàn toàn. Vì vậy, thay vì một cái gì đó như thế này:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    initializeWidgets(); 
</script> 

Hãy thử một cái gì đó như thế này:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    $(document).ready(
    function() { initializeWidgets(); } 
); 
</script> 
+1

Đó là vấn đề, cá nhân tôi không làm điều này, nhưng tôi không có ý tưởng, nếu các ComponentArt Grids, Dialogs, Callbacks, Ajax hộp thoại toolkit vv vv vv đang làm điều này. – JoshBerke

+0

Lỗi javascript đầu tiên tôi nhận được từ đăng ký bộ công cụ kiểm soát Ajax của một cửa sổ bật lên. thất bại bởi vì $ get (element) là null nên thậm chí không mod dom ở đây ... – JoshBerke

+0

Được rồi, tôi vừa thêm một ví dụ về cách bạn có thể giải quyết vấn đề đó. Điều đó có giúp ích gì không? – pkaeding

1

Đây là một thủ thuật tiện lợi tôi đã sử dụng (dựa trên các liên kết trong các ý kiến ​​JS bên dưới) mà hoàn toàn tránh được Op Lỗi ab mà không ảnh hưởng đến hiệu suất trong các trình duyệt khác. Trước tiên, bạn quấn bất kỳ tập lệnh nào bạn đang thực hiện có thể gây ra lỗi (ví dụ: tải/instantiating tiện ích của bên thứ ba) trong một hàm, sau đó gọi hàm đó trong hàm delayExecutionForIE - lưu ý rằng cuộc gọi tới myFunction nằm trong đó hai lần, một lần cho IE và một lần cho các trình duyệt đẹp.

Tập lệnh bên thứ ba của bạn có thể ngăn việc này hoạt động, tùy thuộc vào chính xác nó hoạt động như thế nào và nó dự kiến ​​sẽ được tải như thế nào, nhưng nó chắc chắn đáng để thử.

function delayExecutionForIE() { 
     if (typeof document.all == "object" && 
      (document.readyState != "loaded" 
      && document.readyState != "complete") 
     ) { 
      try { 
        //If IE is used, use the trick by Diego Perini 
        //http://javascript.nwbox.com/IEContentLoaded/ 
        document.documentElement.doScroll("left"); 
        myFunction(); 
      } catch(error) { 
        setTimeout(delayExecutionForIE, 200); 
      } 
     } else { 
      myFunction(); 
     } 
} 

function myFunction() { 
    //this is your function that manipulates the DOM 
} 

delayExecutionForIE(); 
0

Mặc dù IE8 sẽ không còn gây ra lỗi đó để "tai nạn" rendering hoàn toàn, thay vì đăng một lỗi, nó là tiếc là không bị bắt bởi trình gỡ lỗi JavaScript được tìm thấy trong các công cụ phát triển mới, và thông báo lỗi doesn' t cho bạn biết nơi xảy ra lỗi.

Một cách giải quyết, điều này chắc chắn tẻ nhạt, nhưng có thể xác định vấn đề, là sử dụng trình gỡ rối của IE8 để đặt điểm ngắt trên đoạn mã JavaScript đầu tiên được chạy, và sau đó tiếp tục nhấn nút "Bước" cho đến khi biểu tượng lỗi xuất hiện ở góc dưới cùng bên trái của trình duyệt. Khi điều đó xảy ra, bạn biết dòng mã gây ra lỗi là mã được đánh dấu ngay trước khi bạn nhấp vào bước. Tuy nhiên, tôi không thể nghĩ ra bất kỳ điều gì khác (tốt, ngoại trừ việc liên hệ với các nhà cung cấp mã của bên thứ ba đó và xem họ có bất kỳ cập nhật nào có liên quan không).

Tất nhiên, bạn chỉ có thể yêu cầu người dùng nâng cấp lên IE8. ;)

+0

Tôi cũng nâng cấp lên IE8 và mặc dù nó không còn lỗi khi lỗi xảy ra tôi mất chức năng quan trọng trong ứng dụng. Tôi có ý tưởng tốt về những gì đang gây ra vấn đề ngay bây giờ, chỉ cần thử và chứng minh điều đó. Cảm ơn thông tin bổ sung – JoshBerke

+0

Lỗi đó vẫn xảy ra trong IE8, không phải thường xuyên. Xem bài viết của Robert.K ở trên. – Spongeboy

0

Và Microsoft hiện khuyên bạn nên nâng cấp lên IE8!

1

trong hầu hết các trường hợp, đó là sự cố DOM trong JS.

$(element).append(someHtml); 

như vậy trong IE bạn có thể thêm nội dung vào một đối tượng duy nhất nếu nó có nó thẻ đóng

Ví dụ đoạn code dưới đây sẽ làm cho IE7 để mang thông điệp "Operation aborted"

<div id="o"> 

... 
$(o).appendChild(); 
... 

</div> 

Và đúng cách

<div id="o"> 

... 

</div> 

$(o).appendChild(); 
Các vấn đề liên quan