You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript解决浏览器页面随机自动刷新问题

问题解决方案

你遇到的随机刷新大概率是VS Code Live Server的默认自动重载机制导致的,这个扩展会监听项目目录下的文件变动,只要你修改并保存了html、js、css等相关文件,服务端就会主动触发浏览器页面刷新,和浏览器本身无关,这也是多浏览器都复现的核心原因。

1. 关闭Live Server自动重载

操作路径:

  • 打开VS Code设置,搜索 Live Server > Settings: Auto Reload
  • 取消该选项的勾选,之后除非你手动点击浏览器刷新按钮,否则页面不会自动更新。
    如果需要调试时代码改动同步到页面,手动点浏览器刷新即可,避免运行游戏时误触保存导致数据丢失。

2. 持久化存储最高分避免刷新丢失

就算页面刷新,也可以通过浏览器本地存储localStorage保存最高分,不会因为页面重载清空数据,同时修复你代码里again按钮重复绑定事件的逻辑问题,修改后的JS代码如下:

"use strict";

let secretNumber = Math.trunc(Math.random() * 20) + 1;
let score = 20;
// 初始化时从本地存储取最高分,没有则默认为0
let highScore = localStorage.getItem('guessNumberHighScore') ? Number(localStorage.getItem('guessNumberHighScore')) : 0;
// 页面加载时先渲染历史最高分
document.querySelector(".highscore").textContent = highScore;

document.querySelector(".check").addEventListener("click", function() {
  const guess = Number(document.querySelector(".guess").value);

  if (!guess) {
    document.querySelector(".message").textContent = "No Number";
  } else if (secretNumber === guess) {
    document.querySelector(".number").textContent = secretNumber;
    document.querySelector(".message").textContent = "Correct guess! 🎉";
    document.querySelector("body").style.backgroundColor = "#228B22";

    if (score > highScore) {
      highScore = score;
      // 保存最高分到本地存储
      localStorage.setItem('guessNumberHighScore', highScore)
      document.querySelector(".highscore").textContent = highScore;
    }
  } else if (secretNumber < guess) {
    if (score > 1) {
      score--;
      document.querySelector(".score").textContent = score;
      document.querySelector(".message").textContent = "Too High";
    } else {
      document.querySelector(".score").textContent = 0;
      document.querySelector(".message").textContent = "You lost the game.";
    }
  } else {
    if (score > 1) {
      score--;
      document.querySelector(".score").textContent = score;
      document.querySelector(".message").textContent = "Too Low";
    } else {
      document.querySelector(".score").textContent = 0;
      document.querySelector(".message").textContent = "You lost the game.";
    }
  }
});

// 把again按钮的事件监听移到外部,避免重复绑定
document.querySelector(".again").addEventListener("click", function() {
  score = 20;
  document.querySelector(".score").textContent = score;
  secretNumber = Math.trunc(Math.random() * 20) + 1;
  document.querySelector(".message").textContent = "Start Guessing";
  document.querySelector(".number").textContent = "?";
  document.querySelector("body").style.backgroundColor = "#222222";
  document.querySelector(".guess").value = "";
});

3. 额外优化:拦截输入框回车默认行为

部分场景下在输入框输入数字后按回车,可能触发浏览器默认的页面重载行为,可以给输入框加个事件拦截,还可以顺便实现回车触发检查的体验优化:

document.querySelector('.guess').addEventListener('keydown', function(e) {
  if (e.key === 'Enter') {
    e.preventDefault()
    document.querySelector('.check').click()
  }
})

做完以上三步即可解决问题:关闭Live Server自动刷新从根源避免随机重载,加上本地存储就算手动刷新也不会丢失最高分,修复事件绑定逻辑也能避免后续运行异常。

内容的提问来源于stack exchange,提问作者Gregor G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:39:02