2012-06-20 26 views
9

Có thể tiện ích mở rộng của Chrome lắng nghe sự xuất hiện của yếu tố chưa được tạo không?Nghe để tạo thành phần và kích hoạt sự kiện khi xuất hiện trên trang trong Tiện ích mở rộng của Chrome

Giả sử người dùng nhấp vào nút và sự kiện nhấp tạo thành phần <div id='myDiv'>My Div</div> và thêm nó vào trang/DOM. Có thể đặt người nghe sẽ tự động kích hoạt sự kiện khi phần tử đó xuất hiện không?

Hoặc tôi có phải nghỉ mát để bỏ phiếu cho trang và kiểm tra phần tử này cứ sau mỗi mili giây không?

jQuery và các thư viện khác không phải là một tùy chọn cho tôi btw.

+0

Tại sao không theo dõi nhấp chuột vào nút? Hoặc nó sẽ tải thông qua các phương tiện khác? – TheZ

+0

Nó thực sự đang được tạo ra với một cuộc gọi lại AJAX nhưng tôi chỉ phrased nó theo cách đơn giản nhất vì lợi ích của ví dụ. Vì vậy, tôi phải lắng nghe sự sáng tạo/sự xuất hiện của phần tử. –

+0

Sao chép? http://stackoverflow.com/questions/7434685/event-when-element-added-to-page ... Trong mọi trường hợp, có vẻ như giải pháp thanh lịch nhất hiện không được chấp nhận (Sự kiện đột biến DOM), nhưng có một giải pháp hacky được đăng ở đây: http://stackoverflow.com/questions/6997826/alternative-to-domnodeinserted – Cecchi

Trả lời

12

DOM4 MutationObserver mới có thể thực hiện việc này. Tôi chưa cho rằng nó được hỗ trợ rộng rãi, nhưng may mắn cho bạn, nó được hỗ trợ trong Chrome, dưới dạng WebKitMutationObserver.

Modified từ trang hướng dẫn liên quan, đây lắng nghe cho các đột biến ở khắp mọi nơi trên trang:

var observer = new WebKitMutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
     for (var i = 0; i < mutation.addedNodes.length; i++) { 
      if(mutation.addedNodes[i].id == "myDiv") { 
       // target node added, respond now... 
      } 
     } 
    }); 
}); 
observer.observe(document, { subtree: true }); 

Nếu bạn có thể thu hẹp nghe của bạn trong observer.observe đến một yếu tố cụ thể hơn document, mà sẽ cung cấp cho bạn một số đạt được hiệu suất .

+0

Có triển khai kế thừa không? – Zlatko

+0

@zladuric Có lẽ bạn có thể quan tâm [Có một trình lắng nghe thay đổi jQuery DOM không?] (Http://stackoverflow.com/questions/2844565/is-there-a-jquery-dom-change-listener/) – apsillers

+0

Cảm ơn, nhưng tôi không thể sử dụng thư viện bên ngoài. setInterval nó sẽ phải giữ nguyên. – Zlatko

2

Bạn có thể sử dụng arrive.js, nó bao bọc api Mutation Observers. Cách sử dụng:

document.arrive(".test-elem", function() { 
    // 'this' refers to the newly created element 
    var newElem = this; 
}); 
Các vấn đề liên quan