使用 Javascript,每 30 秒刷新一次页面,除非出现一个短语

Using Javascript, refresh a page every 30 seconds UNLESS a phrase appears

现有代码

我在 ViolentMonkey(或 GreaseKit 或 TamperMonkey)中使用以下代码每 30 秒刷新一次页面:

setTimeout(function(){ location.reload(); }, 30*1000);

我可以让它停止吗?

多年来一直运行良好。但是现在,如果存在以下短语,我希望我的代码不刷新页面:Important shizzle

(我不希望它在这种情况下刷新的原因是因为那样我就再也看不到写的东西了。)

我不开悟

我几乎不知道Javascript。我在 YouTube 上观看了教程,尝试学习基础知识。我经常 google 小问题并在 Whosebug 上找到答案(感谢大家)——但我还是很慢


策略思考

  1. 搜索短语 Important shizzle - 如果存在则结束脚本。
  2. 然后我只需要我现有的代码:setTimeout(function(){ location.reload(); }, 30*1000);

唉,我找不到优雅的 Javascript 命令来突然结束脚本。

这行得通吗?

if( !document.body.textContent.includes("Important shizzle")) location.reload();

问题是上面不是每30秒做一次,只是做一次

您可以阅读 .innerText property of the body, then use 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);
var interval=setInterval(()=>{
  let condition = document.body.textContent.includes("Important shizzle");
  if(condition){clearTimeout(timeout); clearInterval(interval)}
},0);