2012-09-19 37 views
7

Tập lệnh nội dung của tôi gửi thông báo tới background.js. Trong trình xử lý gọi lại để trả lời, tôi có dòng cuối cùng là "alert(alrt_msg)". Khi thực thi mã, tôi nhận được hộp cảnh báo, nhưng sau khi nhấp "OK", chrome console chương trình sau đây trong màu đỏ:Lỗi ném tiện ích mở rộng của Chrome trong bảng điều khiển

Error in event handler for 'undefined': Cannot call method 'disconnect' of null TypeError: Cannot call method 'disconnect' of null 
    at chromeHidden.Port.sendMessageImpl (miscellaneous_bindings:285:14) 
    at chrome.Event.dispatch (event_bindings:237:41) 
    at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:250:22) 

nó không cung cấp thông tin nhiều nhưng bằng trực giác tôi biết rằng lỗi này là do một số cấu trúc ở đâu đó là rác được thu thập trong khi người dùng nhấp vào "OK". Vì vậy, tôi đưa mã của tôi như

window.setTimeout(function() { alert(alrt_msg); } , 1);

Điều này làm cho nó hoạt động mà không có lỗi trên. Tuy nhiên, sau khi tìm kiếm tài liệu hoặc google, tôi không thể tìm ra lý do chính xác đằng sau điều này. Ai đó có thể vui lòng giải thích những gì đang xảy ra và liệu tài liệu có chứa một cách cụ thể để làm điều này không?

+0

Mã của bạn là gì? Điều gì xảy ra nếu bạn chèn 'return true;' vào cuối trình nghe sự kiện 'onMessage'? –

+3

Tôi tin rằng lý do là người xử lý cho phản hồi của tin nhắn không chờ cảnh báo được bấm; vì vậy khi bạn đóng cảnh báo để cho phép tập lệnh tiếp tục, trình xử lý không còn ở đó nữa. Tôi không chắc chắn nếu điều này có thể được coi là một lỗi. – Goodwine

+0

@ Goodwine, tôi tin rằng bạn là đúng. – Methos

Trả lời

2

Tôi đã gặp vấn đề tương tự. Điều này là do lỗi (lỗi của mã của tôi) trong một hàm được gọi trong trình xử lý phản hồi.

Đây là mã của tôi:

Trong background.js - phía nghe

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    var update_msg = 'test'; 
    sendResponse({data: update_msg}); 
    return false; // -> Add this or not add this do not matter 
    }); 
} 

Về phía gửi:

function updateObjDatabase(obj) { 
    chrome.runtime.sendMessage({data: obj}, function(response) { 
    // Update when it's done 
    update_msg_handler(response.data); 
    }); 
} 

function update_msg_handler(msg) { 
    ..... error code here 
} 

Mã sai thực sự là trong hàm update_msg_handler. Nhưng bảng điều khiển Chrome sẽ không cho bạn biết chi tiết đó. Bạn phải thêm một số console.log để gỡ lỗi nếu bạn không có IDE.

+0

Tôi có nhiều hoặc ít hơn cùng một vấn đề. Vì vậy, yeah, kiểm tra mã của bạn cho các lỗi guys –

+11

Bạn đã không thực sự giải thích bất cứ điều gì ở đây. Điều gì trong mã của bạn dẫn đến lỗi này đang bị ném? –

1

Tôi đã gặp lỗi tương tự. Đó là ứng dụng iMacros. Sau khi tôi xóa nó không có lỗi.

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