У меня этот script. Он применяется на страницах фильмов RottenTomatoes и изменяет 3 элемента
(1 видимый текст и 2 текста внутри всплывающих подсказок).
В настоящее время (из-за greasemonkey @run-at document-end
) он изменяет элементы только после полной загрузки страницы.
Кроме того, существует много раз, когда страницы RottenTomates задерживают загрузку, до 20 секунд (!),
так что дополнительная задержка для моего script.
Это вызывает две вещи:
- задержка в отображении измененного видимого текста и
- если вы наведите указатель мыши на любую из всплывающих подсказок до того, как страница будет полностью загружена, то после ее загрузки она, вероятно, будет содержать только исходный текст без моего добавления или просто мое добавление.
Чтобы увидеть это, установите script, а затем зайдите в this типичная целевая страница.
Страницы RottenTomatoes загружают различный контент через XHR (как я видел в Firefox Netowork Monitor),
но 3 элемента (которые я хочу изменить) отображаются немедленно, а не когда страница полностью загружена.
Я попытался использовать MutationObserver
, чтобы посмотреть, какое конкретное текстовое значение появится на экране, но оно не работает. Его структура такова:
var target = selector_for_element_containing_text ; // the selector is: document.querySelector('.audience-info > div:nth-child(1)');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
modifyElements();
});
});
var config = { attributes: true, childList: true, characterData: true, subtree: true };
observer.observe(target, config);
function modifyElements(){ // This is just the current code of my script
// modify element 1
// modify element 2
// modify element 3
}
Как изменить элементы сразу после их отображения?