ReSpawner
@ReSpawner

Как перезагружать страницу при появлении определённого элемента?

Иногда на сайте появляется затемнение экрана с просьбой обновить страницу. (т.к данные устарели)
Как сделать так чтобы при появлении "определённого элемента" на странице, в данном случае "затемнение экрана" , автоматически перезагружать её.
И повторять это каждый раз при появлении этого затемнения.
Возможно это можно сделать с помощью "Mutation Observer"

document.querySelector("#content > div > div.taskblackout")


это вызывает это затемнение через какое-то время. \прим. через 2-3 мин.
  • Вопрос задан
  • 399 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Самое простое и надёжное - проверять наличие элемента каждые N секунд (например, 5):
setInterval(function () {
  const $element = document.querySelector("#content > div > div.taskblackout");

  if ($element && $element.style.display === 'block') {
    document.location.reload()
  }
}, 5000);

Единственный минус этого решения - задержка. Элемент может появиться сразу после срабатывания и провисит эти N секунд.
Ещё, если вы часто уходите с этой вкладки, может накопиться очередь из интервалов - в этом случае лучше заменить на setTimeout, который внутри будет вызывать следующий setTimeout:
const check = () => {
  const $element = document.querySelector("#content > div > div.taskblackout");

  if ($element && $element.style.display === 'block') {
    document.location.reload()
  } else {
    setTimeout(check, 5000);
  }
};

setTimeout(check, 5000);
Ответ написан
muscimolus
@muscimolus
const mutationObserver = new MutationObserver(records => {
    records.forEach(record => record.addedNodes.forEach(({ classList }) => {
        classList?.contains('taskblackout') ? location.reload() : undefined
    }))
})
mutationObserver.observe(
    document.querySelector('body'), {
        childList: true
    }
)
setTimeout(() => {
    document.body.appendChild(
        document.createElement('div')
    ).classList.add('taskblackout')
}, 5000)


P.S. Ну а вообще, Vitsliputsli в комментарии правильно сказал. То есть, вместо создания обсервера для отслеживания одного элемента - можно же просто изменить логику события, которое создаёт этот элемент (поп-ап с затмением) и ожидает действий пользователя на простую принудительную перезагрузку страницы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы