HTML本身不能动态显示时间,根本原因是JavaScript定时器未执行或DOM更新被阻塞、覆盖、写错目标;常见问题包括元素ID不匹配、脚本执行过早、定时器内报错静默失败、CSS隐藏、iframe缓存等。

直接说结论:HTML 本身不能“动态显示时间”,所谓“不刷新”是指页面没重载,但时间仍卡住不动——根本原因几乎全是 JavaScript 定时器没跑起来,或 DOM 更新被阻塞、覆盖、写错目标。
setInterval 没执行或执行了但没更新 DOM
这是最常见的情况:写了 setInterval,控制台也没报错,但页面上时间就是不动。
- 检查目标元素是否存在且 ID 匹配,比如 HTML 里是
<div id="clock"></div>,JS 却写了document.getElementById("time") - 确认 JS 执行时机:脚本放在
<head>里但没加defer,DOM 还没解析完就去查元素,结果拿到null -
setInterval返回值没保存,后续无法清除;但更关键的是——如果函数体里抛错(比如调用.textContent时元素为null),整个定时器会静默失败,后续不再触发 - 别用
innerHTML写纯文本时间,尤其当时间字符串含<或&(虽然极少),优先用textContent
时间更新了但视觉上“卡住”
DOM 确实被改了,但你没看到变化——可能不是代码问题,而是浏览器渲染或缓存干扰。
- 某些老旧安卓 WebView 或低版本 Safari 对
requestAnimationFrame支持不稳定,用它做时间循环反而掉帧甚至停摆,回归setInterval(update, 1000)更稳妥 - 页面被放入后台标签页(
visibilitychange触发),Chrome 等浏览器会节流setInterval到最低 1s 甚至更慢,导致秒针跳变;可监听document.hidden,切回前台时手动补一次更新 - CSS 设置了
opacity: 0或visibility: hidden却忘了开,时间在更新,只是你看不见
iframe 嵌入的时钟不更新
如果你把时钟逻辑封装进一个独立 HTML 文件,再用 <iframe src="clock.html"></iframe> 嵌入,那“不刷新”大概率是 iframe 缓存导致的。
立即学习“前端免费学习笔记(深入)”;
- 浏览器对 iframe 的
srcURL 会走完整 HTTP 缓存流程,哪怕 clock.html 本身加了Cache-Control: no-cache,只要服务端响应头没设no-store,就可能复用缓存版本 - 最简解法:动态拼时间戳参数,例如
iframe.src = "clock.html?v=" + Date.now();避免用Math.random(),同一页面多次调用会导致重复加载 - 服务端必须返回
Cache-Control: no-store, must-revalidate,仅no-cache不够——它允许缓存,只强制校验,仍可能返回 304
真正难排查的,往往不是定时器写错了,而是 DOM 被其他脚本反复覆盖、CSS 隐藏了内容、或者 iframe 在缓存里睡着了——先看 Network 面板里时间请求是否真发出去了,再查元素是否真的被改了 textContent,最后才动刀改逻辑。



















