2013-01-25 43 views
12

Tôi dường như không tìm thấy bất kỳ điều gì trong tài liệu về tiện ích mở rộng của Chrome về xử lý ngoại lệ. Tất cả các apis không đồng bộ làm cho nó rất khó mà không xả rác mã với các câu lệnh try/catch ở mọi nơi ..Xử lý ngoại lệ trong các tiện ích của Chrome

Làm thế nào tôi có thể thêm một trình xử lý ngoại lệ toàn cục vào trang nền của tôi cho phép tôi dọn dẹp tài nguyên trong trường hợp một ngoại lệ?

+0

Có một số biến được đặt trong một lỗi hoặc ngoại lệ và không có phương pháp xử lý lỗi rõ ràng như vậy cho đến ngày. Nếu bạn muốn làm sạch tài nguyên, bạn có thể đặt mã của bạn trong một số trình xử lý sự kiện quản lý – Sudarshan

Trả lời

12

Hi bạn thực sự có thể nhận được lỗi trong callback thực thi kịch bản với chrome.extension.lastError xem chrome extension documentation

Vì vậy, thực hiện, nếu có một cái gì đó như thế này:

chrome.tabs.executeScript(tabId, details, function(){ 
    if (chrome.extension.lastError){ 
     var errorMsg = chrome.extension.lastError.message; 
     if (errorMsg == "Cannot access a chrome:// URL"){ 
      //Error handling here 
     } 
    } 
}) 

CẬP NHẬT 2017

chrome.extension.lastError.message có hiện không được chấp nhận. Triển khai lastError vẫn tồn tại nhưng trên chrome.runtime.lastError.

Thực hiện điều này không thay đổi nhiều trong những chức năng ban đầu:

chrome.tabs.executeScript (tabId, details, function() { 
    if (chrome.runtime.lastError) { 
     var errorMsg = chrome.runtime.lastError.message 
     if (errorMsg == "Cannot access a chrome:// URL") { 
      // Error handling here 
     } 
    } 
}) 
+1

Các lỗi tôi cần để dọn dẹp là từ tập lệnh nội dung đang cố gắng thực thi trên trang 404 (không thể tải). Trong trường hợp này, tôi cần kiểm tra 'chrome.runtime.lastError' thay vì' chrome.extension.lastError'. Sau sự thay đổi nhỏ này cho câu trả lời, các lỗi của tôi đã biến mất. – MDMower

3

Tôi chưa thể tìm thấy trình xử lý lỗi toàn cục nhưng tôi cũng có thể đưa ra giải pháp hoạt động tốt.

Tùy thuộc vào phương pháp bạn đang gọi. Hầu hết các lỗi của tôi xuất phát từ việc gọi số chrome.tabs.executeScript() trên trang chrome:// hoặc trang cửa hàng Chrome trực tuyến. Tham số cuối cùng của hàm này là một cuộc gọi lại có chứa một mảng results. Tôi thấy rằng nếu đây là undefined Tôi đã nhận được một lỗi trở lại. Bằng cách này, tôi đã có thể thiết lập một chức năng xử lý lỗi đơn giản để thông báo cho người dùng khi có lỗi.

chrome.tabs.executeScript(null, {file: '/path/to/file.js'}, function(results) { 
    if (results === undefined) { 
     // Fire error handling code 
    } 
}); 

Một lần nữa, hãy thử nếu điều này phù hợp với các phương pháp bạn gọi nhưng tôi có thể làm những gì tôi muốn theo cách này.