2010-01-08 40 views
5

Các onerror page on MSDN nói rằng xử lý onerror có thể được gắn vào một yếu tố kịch bản và rằng nó "cháy khi một lỗi xảy ra trong quá trình tải đối tượng."Cách kích hoạt script.onerror trong Internet Explorer?

Với mục đích kiểm tra đơn vị, tôi đang cố gắng xử lý onerror này để kích hoạt, nhưng không thể tìm thấy một ví dụ phù hợp.

Các mã sau đây gây ra một lỗi trong Firefox, nhưng không có cảnh báo được hiển thị trong trình duyệt Internet Explorer

<script src="http://www.google.com/NOTFOUND.js" onerror="alert('error fired')"></script> 

Có ai biết giá trị cho script.src có thể sẽ cháy xử lý gắn liền với script.onerror?

+0

IIRC, giống như 'src =" 1 "' sẽ kích hoạt lỗi. – kangax

+0

@kangax: tốt đẹp thử nhưng không, src = "1" chỉ gây nên window.onerror, không script.onerror –

+0

không thực sự liên quan đến câu hỏi này nhưng tôi nhận thấy bạn đã cam kết đề xuất xem xét mã. Điểm số đại diện của bạn không hiển thị chính xác vì một số lý do. Bạn có thể cần liên kết tài khoản của mình hoặc xác nhận một số email để khắc phục. Đại diện thấp hơn có ít tác động đến đề xuất cam kết không may. – greatwolf

Trả lời

8

Tôi thấy điều này buried in some MSDN documentation:

Lưu ý rằng các tài liệu nhầm nói việc này cho các yếu tố quá; lỗi sẽ được sửa trong tài liệu Hội thảo cho bản phát hành cuối cùng của Internet Explorer 5 vào tháng 3.

Điều tiếp theo tôi nghĩ về điều đó có thể giúp là sự kiện onreadystatechange:

<script src="http://www.google.com/NOTFOUND.js" onreadystatechange="alert(this.readyState)"> 

cháy Sự kiện này hai lần đối với tôi, một lần với "tải" và một lần nữa với "nạp", cho dù kịch bản là hợp lệ hay không. Tài liệu khác tôi đã tìm thấy nói rằng đôi khi nó cháy một sự kiện hoàn chỉnh, và nó không thực sự rõ ràng khi nó phải bắn. Vì vậy, có vẻ như điều đó sẽ không hoạt động.

Vì vậy, tôi nghĩ rằng bạn đã bỏ đi với giải pháp hacky để kiểm tra xem biến có kịch bản được cho là khai báo thực sự tồn tại hay không.Trong HTML:

<script src="http://yourdomain.com/declare_foo.js"></script> 
<script>if (typeof foo == "undefined") {alert ('error loading script');}</script> 

Và sau đó tất nhiên trong declare_foo.js, bạn phải

var foo = 'Script loaded successfully'; 
+1

Rất thú vị !! Đáng buồn là tôi không thể giả định rằng một biến cụ thể sẽ có mặt trong kịch bản, vì mã này sẽ được sử dụng trong tự nhiên để tải các kịch bản của bên thứ ba động. Tôi đã thêm nhận xét vào trang onerror trên MSDN để trỏ lại bài viết và ghi chú bạn tìm thấy. Cảm ơn Annie. –

+0

@Eric bạn đã bao giờ tìm giải pháp cho vấn đề này chưa? – Tom

+0

@Tom không, không có cách giải quyết. Một số lỗi chỉ không thể bị bắt trong JavaScript. –

0

Vừa đọc xong một chút, có vẻ như onerror cũng có thể được gắn vào đối tượng cửa sổ. Xem:

http://www.javascriptkit.com/javatutors/error.shtml

Theo trang đó, bạn có thể vượt qua trong msg, url và linenumber đối số:

window.onerror=function(msg, url, linenumber){ 
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber) 
return true 
} 

Không chắc vào sự hỗ trợ trình duyệt cho điều này, nhưng nhờ đưa nó vào tôi chú ý!

Cập nhật: đã không làm bất cứ điều gì trong Safari 4 (ngoài ghi lại một lỗi trong firebug theo bình thường), nhưng cho thấy cảnh báo trong Firefox 3.6 Beta thử nghiệm 5. Lỗi tại http://www.javascriptkit.com/javatutors/errortest2.htm

Cập nhật 2 : thực hiện một thử nghiệm với những điều sau đây:

index.html:

<html> 
<head> 
<script type="text/javascript"> 

window.onerror=function(msg, url, linenumber){ 
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber) 
return true 
} 
</script> 

<script type="text/javascript" src="js.js"></script> 
</head> 
<body> 
</body> 
</html> 

js.js: (! tên ngu ngốc, tôi biết)

01.
document.write('hi there' 

quả trong FF 3.6 Beta 5:

Result

+1

Cảm ơn nhận xét. Tôi nên đã đề cập rằng tôi biết làm thế nào để kích hoạt trình xử lý window.onerror; ở đây tôi đặc biệt quan tâm đến trình xử lý script.onerror. –

+2

Cảm ơn Adam, nhưng tôi thực sự cố gắng để bắn script.onerror ở đây, không window.onerror. Tôi muốn phát hiện kết thúc (không thành công) của tải một kịch bản năng động, và thiết lập xử lý để window.onerror sẽ không thực sự giúp đỡ. –

0

Làm thế nào về điều này?

<script language="JavaScript" type="text/javascript"> 
    var DidItLoad=0; 
    function funcDidItLoad() 
    { 
     if(DidItLoad==1) 
     { 
      alert("good") 
     } 
     else 
     { 
      alert("bad") 
     } 
     DidItLoad=0; 
     return 0; 
    } 
    </script> 
    <script language="JavaScript" type="text/javascript" onload="DidItLoad=1;" src="javascript/myError.js"></script><!--erase me--> 
    <script language="JavaScript" type="text/javascript"> 
     funcDidItLoad(); 
    </script> 
+1

cảm ơn, nhưng tôi đã tìm kiếm một giải pháp chung để sử dụng trong một thư viện JavaScript, không phải là một giải pháp một lần. –

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