2010-06-22 37 views
6

Tôi tạo một thông báo lỗi hoạt động với IE và Mozila. Không háo hức với Safari, Chrome và Opera.window.onerror trong Safari (Javascript)

Nhưng tôi cần sử dụng nó. Xin vui lòng cho tôi đúng cách để làm điều đó.

<script language="javascript" type="text/javascript"> 
window.onerror = function(msg, url, line) 
{ 
    document.write("Message\t = "+msg + "<br/>Location\t = " + url + "<br/>Line No.\t = " + line + "<br/>Error No.\t = " + this.err.number); 
} 
this.err = Error(12,"My Own Error"); 
throw this.err; 
</script> 

========================================== 
Internet Explorer: 

My Error 
Message = My Own Error 
Location = http://localhost/practice/JavaScript/window.errors.php 
Line No. = 8 
Error No. = 12 
================================================ 
Mozilla FireFox: 

My Error 
Message = Script error. 
Location = My Own Error 
Line No. = 0 
Error No. = undefined 
===================================================== 
Safari, Chrome, Opera: 

My Error 

tìm mã Mozilla cung cấp thông tin sai. những gì tôi làm?

+2

* (Tham khảo) * http://www.quirksmode.org/dom/events/error.html sự kiện này thực sự được hỗ trợ rất nhiều trên IE và FF; không chắc liệu có bất kỳ điều gì có thể được thực hiện về nó hay không. –

Trả lời

5

Opera không hỗ trợ window.onerror. Chrome hỗ trợ nhưng không phải do lỗi bạn tự ném. Điều này cũng đúng với Internet Explorer khi sử dụng các đối tượng Lỗi khác ngoài Error(), ví dụ: TypeError(). Chrome cũng không cung cấp các đối số dòngtệp.

Bạn phải nắm bắt chính xác bất kỳ ngoại lệ nào bạn sẽ ném bằng tuyên bố try...catch, thay vì dựa vào window.onerror.

+7

Vấn đề là bắt các ngoại lệ/lỗi mà bạn KHÔNG ném, nhưng có khả năng xảy ra trong một JS đủ phức tạp (ví dụ, để hiển thị một thông điệp xin lỗi tốt đẹp cho người dùng). Tôi cũng đang xem xét cùng một vấn đề và Chrome/Safari không phát hiện lỗi tham chiếu không hợp lệ - được cho là thường xuyên nhất. – sereda

+0

@sereda: sau đó tôi e rằng bạn không may mắn, trừ khi bạn muốn gói từng khối mã bằng các câu lệnh try và catch (vui lòng không :-)). Giải pháp, tất nhiên, là viết mã lỗi miễn phí và kiểm tra càng nhiều càng tốt. –

+4

@AndyE Bạn chỉ có thể viết dưới dạng mã lỗi miễn phí khi thư viện của bên thứ ba cho phép bạn. Ví dụ, tôi đã kết thúc ở đây bởi vì tôi phải sử dụng thư viện Javascript Facebook lỗi, và ngoại lệ họ đang ném thậm chí không thể bắt được thông qua try/catch vì nó kích hoạt từ một hộp thoại mà họ kiểm soát. –

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