Brock's answer là tốt, nhưng tôi muốn cung cấp giải pháp khác cho vấn đề AJAX, để hoàn chỉnh. Kể từ khi kịch bản của ông cũng sử dụng setInterval()
để kiểm tra định kỳ (300ms), nó không thể trả lời ngay lập tức.
Nếu bạn cần phải đáp ứng ngay lập tức, bạn có thể sử dụng MutationObserver()
để lắng nghe những thay đổi DOM và trả lời họ càng sớm càng yếu tố được tạo ra
(new MutationObserver(check)).observe(document, {childList: true, subtree: true});
function check(changes, observer) {
if(document.querySelector('#mySelector')) {
observer.disconnect();
// code
}
}
Mặc dù kể từ check()
cháy trên tất cả các thay đổi DOM duy nhất, điều này có thể chậm nếu DOM thay đổi rất thường xuyên hoặc tình trạng của bạn mất nhiều thời gian để đánh giá.
Trường hợp sử dụng khác là nếu bạn không tìm kiếm bất kỳ thành phần cụ thể nào, nhưng chỉ cần đợi trang ngừng thay đổi. Bạn có thể kết hợp điều này với setTimeout()
để chờ điều đó.
var observer = new MutationObserver(resetTimer);
var timer = setTimeout(action, 3000, observer); // wait for the page to stay still for 3 seconds
observer.observe(document, {childList: true, subtree: true});
function resetTimer(changes, observer) {
clearTimeout(timer);
timer = setTimeout(action, 3000, observer);
}
function action(o) {
o.disconnect();
// code
}
Phương pháp này rất linh hoạt, bạn cũng có thể nghe các thay đổi về thuộc tính và văn bản. Chỉ cần thiết lập attributes
và characterData
để true
trong các tùy chọn
observer.observe(document, {childList: true, attributes: true, characterData: true, subtree: true});
Bạn có thể sử dụng '(hàm init() {var counter = document.getElementById ('id-of-yếu tố'); if (bộ đếm) {/ * làm một cái gì đó với phần tử truy cập * /} else {setTimeout (init, 0);}})(); 'để thăm dò liên tục cho sự tồn tại của phần tử. Đó là giải pháp chung nhất. –
Anh em họ của Greasemonkey, Tampermonkey và Scriptish, hỗ trợ nhiều giá trị ['@ run-at'] (https://tampermonkey.net/documentation.php#_run_at) bao gồm' document-idle' và 'context-menu' có thể là sử dụng. Nó cũng xuất hiện rằng Greasemonkey là [thêm hỗ trợ] (https://github.com/greasemonkey/greasemonkey/issues/2109) cho 'tài liệu-idle' mặc dù nó đã không được tài liệu như được nêu ra. –