2010-10-16 42 views
7

Tôi có một trang web đột nhiên bắt đầu gặp sự cố Internet Explorer.Trang web của tôi tiếp tục gặp sự cố IE, không thể gỡ lỗi

Trang web tải và bắt đầu thực hiện javascript nhưng một nơi nào đó trong đó máy móc phát nổ. Tôi thậm chí không nhận được một lỗi kịch bản, nó chỉ bị treo. Tôi đã cố gắng tự bước qua tất cả các dòng của js với xây dựng trong trình gỡ lỗi nhưng sau đó tất nhiên vấn đề không xảy ra.

Nếu tôi chọn gỡ lỗi ứng dụng khi gặp lỗi, tôi thấy thông báo sau.

Ngoại lệ chưa xử lý tại 0x6c5dedf5 trong iexplore.exe: 0xC0000005: Truy cập vị trí đọc vi phạm 0x00000090.

5 mặt hàng hàng đầu trong các cuộc gọi stack trông giống như

Vgx.dll này! 6c5dedf5()
[Khung dưới đây có thể không chính xác và/hoặc mất tích, không có biểu tượng nạp cho Vgx.dll]
Vgx.dll! 6c594d70()
Vgx.dll! 6c594f63()
Vgx.dll! 6c595350()
Vgx.dll! 6c58f5e3()
mshtml.dll! 6f88dd17()

VGX.dll dường như là một phần của trình kết xuất đồ họa và tôi đang sử dụng VML. Tôi không ngạc nhiên bởi vì tôi đã có rất nhiều vấn đề với vml, các thuộc tính phải được đặt theo thứ tự cụ thể, đôi khi bạn không thể thiết lập các thuộc tính khi bạn có các phần tử gắn với dom hoặc ngược lại (mọi thứ không có giấy tờ btw) nhưng sau đó là các vấn đề thường có thể được sao chép khi gỡ lỗi nhưng không phải bây giờ :(

vấn đề này cũng xảy ra trong không Plugin-mode

có một cách tiếp cận tốt hơn so với thử và sai để giải quyết này

Edit:.? Thêm một giao diện điều khiển xuất ra mọi sửa đổi nghi ngờ đối với DOM khiến vấn đề chỉ xảy ra đôi khi. thực hiện trong javascript trên cùng một trang, tôi có thể thấy đầu ra ngay cả sau khi một vụ tai nạn như cửa sổ vẫn còn nhìn thấy được) Rõ ràng nó có vẻ là một số loại điều kiện chủng tộc.

Tôi đã quản lý để theo dõi nó sâu hơn nữa và dường như nó xảy ra khi bạn xóa một đối tượng khỏi DOM quá nhanh sau khi nó vừa được thêm vào. (rất có thể chỉ dành cho các phần tử vml với một số thuộc tính đặc biệt, không thử thêm) Và nó không thể được sửa bằng cách thêm một vòng lặp chết trước removeChild (giải pháp khá tệ), trang phải được hiển thị bởi trình duyệt một lần sau addChild trước khi bạn có thể gọi removeChild. thở dài

+1

Chỉ cần đùa - nhưng, bạn có thể tạo một khai thác (khác) cho IE từ điều này. Tôi có nghĩa là bạn kết thúc đọc từ một số vị trí bộ nhớ tắt. Có lẽ bạn có thể làm điều này để làm điều gì đó thực sự tồi tệ. Ngoài ra, một cửa sổ được cập nhật đầy đủ và cập nhật/IE sẽ không bị lỗi từ bất kỳ trang web nào, cho dù mã của bạn có sai sót không. Có lẽ có một số nơi để báo cáo điều này? – zerm

+1

Vui lòng gửi cho tôi một trang hoặc URL repro; Tôi rất vui khi có một cái nhìn! (ericlaw @ microsoft). Cảm ơn! – EricLaw

+0

FYI, lần sau hãy đặt máy chủ biểu tượng của bạn thành Máy chủ biểu tượng của Microsoft để có ngăn xếp cuộc gọi tốt hơn: http://msdn.microsoft.com/en-us/library/b8ttk8zy%28v=vs.80%29.aspx –

Trả lời

1

Ngừng sử dụng VML?

Nếu bạn cần các công cụ trong IE thực sự không thể thực hiện được bằng cách di chuyển, mở rộng, cắt xén và thay thế hình ảnh, sau đó cân nhắc sử dụng Flash, Silverlight hoặc tương tự.

Nếu cuộc sống của bạn phụ thuộc vào VML thì hãy đọc càng nhiều càng tốt về trải nghiệm của người khác, điều đó có thể làm giảm khả năng tiếp cận dùng thử và lỗi.

0

Đảm bảo rằng tập lệnh của bạn đang chạy sau khi sự kiện DOMReady xảy ra. IE nổi tiếng về sự cố khi sửa đổi DOM trước khi nó được nạp đầy đủ.

Trong một số trường hợp, IE có thể kích hoạt sớm sự kiện DOMReady. Xem thêm thông tin về cách khắc phục điều này herehere.

+0

Don không nghĩ rằng đó là vì điều này bởi vì vấn đề có thể xảy ra lâu sau khi trang đã được tải và tương tác của người dùng. Sẽ cố gắng để kiểm tra này ra nhiều hơn mặc dù khởi động onload của tôi là một chút của một hack ngay bây giờ. –

0

Bạn có đang sử dụng JSONP dưới mọi hình thức không? Các triển khai phổ biến như jQuery có xu hướng thử và dọn sạch bộ nhớ bằng cách xóa nút kịch bản lệnh khỏi DOM sau khi nó đã chạy. Tôi đã thấy rằng Internet Explorer bị lỗi trong nhiều trường hợp. Không bao giờ có thể tìm ra những điều kiện cần thiết khác để gây ra sự cố đó. Quá nhiều thứ đang diễn ra trong các trang khác của tôi.

Nhưng dù sao, nếu bạn đang sử dụng jQuery.getJSON, đánh dấu vào dòng sau trong mã nguồn jquery: (dòng 5556 trên jquery 1.4.3):

} else { 
    // Garbage collect 
    window[ jsonp ] = undefined; 

    try { 
    delete window[ jsonp ]; 
    } catch(jsonpError) {} 
} 

if (head) { 
    head.removeChild(script); 
} 

Bạn có thể yên tâm loại bỏ, hoặc conditionalize nó chỉ xảy ra trong các trình duyệt không phải của IE. Hy vọng điều đó sẽ hữu ích.

+0

Không, không sử dụng JSONP hoặc jQuery. –

4

(câu hỏi cũ nhưng quan trọng)

Tôi đã có một vấn đề rất giống nhau - bao gồm rất nhiều phức tạp VML (từ Raphael), và nó trông gần như không thể gỡ lỗi.

Thực ra, hóa ra cách tiếp cận công nghệ thấp đơn giản nhất là tốt nhất. Đó là một cách tiếp cận rõ ràng: Tôi đang viết ở đây bởi vì đôi khi phải đối mặt với một vấn đề đáng sợ, các giải pháp đơn giản, rõ ràng là người cuối cùng nghĩ đến.

Vì vậy, gỡ rối trường học đơn giản: Rất nhiều alert("1");, alert("2"); vv trước và sau mỗi cuộc gọi yêu cầu hoặc phức tạp từ xa, cung cấp các điểm ngắt đáng tin cậy siêu đơn giản không dựa vào bất kỳ tính năng nào (ví dụ: công cụ nhà phát triển) điều đó có thể tự sụp đổ. Sau đó, chỉ cần xem cảnh báo số nào bạn nhận được trước khi sự cố xảy ra - sự cố phải xảy ra giữa cảnh báo đó và cảnh báo tiếp theo.

Thêm thông báo khác cho đến khi bạn thu hẹp nó xuống dòng chính xác. Trong trường hợp của tôi, nó thực sự không có gì để làm với VML phức tạp - nó là một vòng lặp cho rằng, vì một số lý do đã được tiếp tục vô hạn chỉ trên IE7.

+0

Yup. Chúng tôi bị mù bởi các công cụ ưa thích của chúng tôi, nhưng rất thường các kỹ thuật cũ hoạt động tốt hơn. –

1

Biến số con trỏ rỗng của nó không thể khai thác được

Các vấn đề liên quan