Brock's answer很好,但爲了完整性,我想提供另一種AJAX問題的解決方案。由於他的腳本也使用setInterval()
定期檢查(300毫秒),因此無法立即響應。
如果你需要立即作出反應,你可以使用MutationObserver()
,因爲在每一個DOM的變化,這可能check()
火災偵聽DOM的變化,對他們儘快元素創建
迴應
(new MutationObserver(check)).observe(document, {childList: true, subtree: true});
function check(changes, observer) {
if(document.querySelector('#mySelector')) {
observer.disconnect();
// code
}
}
雖然如果DOM經常變化或者您的狀況需要很長時間才能評估,則速度會變慢。
另一個用例是,如果您不想查找任何特定元素,而只是等待頁面停止更改。你可以將它與setTimeout()
結合起來等待。
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
}
這種方法是如此多才多藝,你可以聽的屬性和文本也會改變。只需在選項中設置attributes
和characterData
到true
observer.observe(document, {childList: true, attributes: true, characterData: true, subtree: true});
你可以使用'(函數的init(){VAR計數器=的document.getElementById() '元素ID-的 - ';如果(計數器){/ *做其他元素* /} else {setTimeout(init,0);}})();'連續查詢元素的存在。這是最通用的解決方案。 –
Greasemonkey的表兄弟Tampermonkey和Scriptish支持更多['@ run-at'](https://tampermonkey.net/documentation.php#_run_at)值,其中包括'document-idle'和'context-menu',可能是使用。它似乎也是Greasemonkey [添加支持](https://github.com/greasemonkey/greasemonkey/issues/2109)用於'document-idle',儘管它尚未被記錄。 –