Используя Javascript, обновляйте страницу каждые 30 секунд, ЕСЛИ НЕ появляется фраза
Существующий код
Я использую следующий код в ViolentMonkey (или GreaseKit или TamperMonkey) для обновления страницы каждые 30 секунд:
setTimeout(function(){ location.reload(); }, 30*1000);
Могу я остановить это?
Это прекрасно работает уже много лет. Но теперь я хочу, чтобы мой код НЕ обновлял страницу, если присутствует следующая фраза:
(Причина, по которой я не хочу, чтобы он обновлялся при этом условии, состоит в том, что тогда я больше не смогу видеть, что было написано.)
Я непросвещенный
Я почти не знаю Javascript. Я смотрел обучающие программы на YouTube, чтобы попытаться изучить основы. Я часто гуглил небольшие вопросы и нахожу ответы на Stackoverflow (спасибо всем), но я все еще очень медленный
Стратегические мысли
- Найдите фразу
- если он существует, завершите скрипт. - Тогда у меня будет только мой существующий код:
setTimeout(function(){ location.reload(); }, 30*1000);
Увы, я не могу найти элегантную команду Javascript для внезапного завершения скрипта.
Это сработает?
if( !document.body.textContent.includes("Important shizzle")) location.reload();
Проблема в том, что вышеупомянутое не делает это каждые 30 секунд, а просто делает это один раз.
3 ответа
Вы можете прочитать .innerText
свойство тела, затем используйте String#includes
чтобы увидеть, присутствует ли ваша фраза.
Если он присутствует, вы можете
return
вне функции, чтобы завершить сценарий.
Что-то вроде этого:
const timeout = setTimeout(function () {
if (document.body.innerText.includes('Important shizzle')) return;
location.reload();
}, 30 * 1000);
Сделать это можно так:
setInterval(reload, 30*1000);
function reload() {
if ( isReloadOK() ) location.reload();
}
function isReloadOK(){
if (document.body.textContent.includes("Important shizzle")) return false;
return true;
}
У вас может быть тайм-аут, и вы можете ДОБАВИТЬ интервал, и я буду использовать пример из того, что вы уже показали ... самая важная часть - это
clearTimeout
var timeout=setTimeout(function(){ location.reload(); }, 30*1000);
setInterval(()=>{
if( document.body.textContent.includes("Important shizzle") ) clearTimeout(timeout);
})