2012-05-05 46 views
14

Tôi cố gắng để loại bỏ các onRequest nghe thêm bởi chrome.extension.onRequest.addListener sau một yêu cầu được thực hiện, như thế này:Làm thế nào để loại bỏ sự kiện người nghe trong phần mở rộng Chrome

chrome.extension.onRequest.addListener(
    function(request){ 
     chrome.extension.onRequest.removeListener(); 
     other_function(request); 
    } 
); 

Vấn đề là tôi không biết nếu công trình này hay không. Tôi đã thử chrome.extension.onRequest.hasListener, dường như không đưa ra câu trả lời đúng, vì vậy tôi tự hỏi liệu có một số cách khác để xóa trình nghe onRequest hoặc kiểm tra xem người nghe có tồn tại hay không.

Cảm ơn!

Trả lời

28

removeListener lấy một đối số. Bạn cần phải đặt tên cho chức năng nghe và sau đó loại bỏ nó bằng tên:

function doStuff(request){ 
    chrome.extension.onRequest.removeListener(doStuff); 
    other_function(request); 
} 
chrome.extension.onRequest.addListener(doStuff); 

Hoặc, một cách ngắn gọn hơn:

chrome.extension.onRequest.addListener(
    function doStuff(request){ 
     chrome.extension.onRequest.removeListener(doStuff); 
     other_function(request); 
    } 
); 
+0

Cảm ơn, apsillers, nhưng không phải chức năng gọi lại ('doStuff' trong trường hợp này) của người nghe sự kiện cần phải được ẩn danh? – chaohuang

+0

@chaohuang: không, không có yêu cầu gọi lại là ẩn danh. – Ashe

+0

@Len Vì vậy, điều này có nghĩa rằng điều này khác với callbacks của 'element.addEventListener' trong DOM, như đã đề cập [ở đây] (https://developer.mozilla.org/en/DOM/element.addEventListener) (bên dưới ví dụ đầu tiên, nó nói, báo giá, "Nếu bạn muốn chuyển các tham số cho hàm listener, bạn phải sử dụng một hàm ẩn danh.")? – chaohuang

5

Một phương pháp đơn giản và thẳng về phía trước khi sử dụng chức năng ẩn danh:

chrome.runtime.onMessage.addListener(function(msg, sender, reply) { 
    chrome.runtime.onMessage.removeListener(arguments.callee); 
}); 
Các vấn đề liên quan