2010-03-05 42 views
12

Làm cách nào để ghi đè trình xử lý ngoại lệ toàn cầu trong javascript để nó trở thành trình xử lý cấp cao nhất cho tất cả ngoại lệ chưa được nắm bắt?Trình xử lý ngoại lệ javascript toàn cầu (trong Chrome)

EDIT: window.onerror didnt làm việc, mã là:

<HTML> 
<HEAD> 
<script language='javascript'> 
    window.onerror = function (em, url, ln) { 
     alert(em + ", " + url + ", " + ln); 
     return false; 
    } 

    function fGo() { 
     try 
     { 
      var a = b; // error here : b not defined 
     } 
     catch (e) 
     { 
      throw e; 
     } 
    } 
</script> 
</HEAD> 
<BODY> 
    <button onclick='fGo()'>GO</button> 
</BODY> 
</HTML> 

Tôi đang thử nghiệm trên chrome, bằng cách này. Bảng điều khiển dành cho nhà phát triển đăng ký ngoại lệ không bị bắt, nhưng cảnh báo() trong window.onerror không xuất hiện.

Trả lời

14

Google Chrome không hỗ trợ window.onerror, rõ ràng nó không được triển khai trong webkit.

Cập nhật: giờ đây Chrome cũng hỗ trợ window.onerror. (Tôi có 25 chú thích phiên bản ngụ ý các phiên bản trước đó)

Điều tôi đã làm là bọc JQuery bằng cách sử dụng dòng lệnh để tạo một proxy luôn có chức năng try...catch trong các hàm JQuery.

Tôi sử dụng nó trong www.js-analytics.com, tuy nhiên giải pháp chỉ giữ cho tập lệnh JQuery.

+0

Đúng vậy. Và WebKit gần đây đã thực hiện một số tiến bộ trong việc sửa lỗi đó. Nó chưa được khắc phục, nhưng tại đây bạn có liên kết để cập nhật: https://bugs.webkit.org/show_bug.cgi?id=8519 –

+0

Theo http://groups.google.com/group/js-test- driver/browse_thread/thread/14c7e6d615a2b803? pli = 1 cần được sửa trong Chrome 10 – Korny

+3

Tôi đang sử dụng Chrome 14 (bản phát hành mới nhất) và window.onerror hoạt động! – Nick

3
window.onerror = function(errorMsg, url, lineNumber) { 
    // code to run when error has occured on page 
} 
0

Có lẽ bạn đang tìm kiếm window.onerror Bạn không chắc chắn liệu tính năng này có khả dụng trên tất cả các trình duyệt hay không.

+0

Không, đáng chú ý là trên Safari, nhưng đó là một khởi đầu thực sự tốt. –

+1

Phiên bản mới nhất của Safari (và Chrome) hỗ trợ nó. Để tham khảo, tôi đã xác nhận trên Safari 5.1 và Chrome 14, cả trong Mac OS X. Không chắc chắn khi nào cuối cùng chúng được thêm vào các trình duyệt đó, nhưng bây giờ nó có sẵn trên tất cả các trình duyệt chính. – Nick