content="秒数"刷新当前页,content="秒数;url=地址"延时跳转;秒数支持小数但低于1秒Chrome强制100ms延迟;分号须英文半角、url=须小写无空格,否则静默失效。

meta http-equiv="refresh" 的延时怎么写
直接写 content="秒数" 就是延时刷新当前页,写 content="秒数;url=地址" 就是延时跳转。秒数支持小数(比如 2.5),但低于 1 秒时 Chrome 会强制延迟至少 100ms。
-
content="5"→ 5 秒后刷新当前页面 -
content="3;url=/login"→ 3 秒后跳转到/login -
content="0;url=https://example.com"→ 立即跳转(注意:部分 WebView 可能静默忽略)
分号必须是英文半角,url= 必须小写、不能有空格,否则整个标签被浏览器忽略——不会报错,也不会生效。
为什么延时没起作用
最常见的失效原因是 content 格式错误,浏览器静默跳过,你根本看不到提示。
-
content="3 ; url=/home"❌(分号后空格) -
content="3,url=/home"❌(逗号代替分号) -
content="3; /home"❌(漏掉url=前缀) -
content="3;rul=/home"❌(拼错url)
相对路径按 HTML 文件物理位置解析,不是按当前 URL。比如页面在 /app/v2/index.html,url=./about.html 会解析成 /app/v2/about.html,而 url=/about.html 才是根路径。
立即学习“前端免费学习笔记(深入)”;
延时跳转和 JS 跳转的根本区别
meta http-equiv="refresh" 是浏览器底层行为,不是 JS 执行流的一部分,所以它绕过所有前端控制逻辑。
- 无法用
window.onbeforeunload拦截 - 不走
history.pushState或路由系统,SPA 中会彻底销毁应用实例 - 页面重载,表单输入、滚动位置、JS 临时状态全丢
- 在 iOS WebView 中可能被静默忽略,尤其未获得焦点时
如果你需要倒计时文案、用户取消按钮、埋点上报或条件判断(比如“登录态失效才跳”),meta 标签就不是解决方案,而是兜底手段。
生产环境怎么安全用延时跳转
单独靠 meta 标签风险太高,实际部署必须双保险。
- 在
<head>放保底:<meta http-equiv="refresh" content="5;url=/login"> - 在
<body>底部加轻量 JS:setTimeout(() => location.replace('/login'), 5000) - JS 部分要处理 visibilitychange,避免标签页休眠导致定时不准
- 如果页面有表单,JS 跳转前应检查
document.hasFocus()或监听input事件防误跳
真正容易被忽略的不是语法,而是它不触发任何生命周期钩子——你没法知道它什么时候开始倒计时,也没法在跳转瞬间做清理,只能靠 JS 补位。



















