绝对路径本身不会触发onerror循环,真正导致循环的是fallback资源404且未设this.onerror=null;必须同时满足路径可达、立即执行this.onerror=null、避免带参绝对路径。

绝对路径本身不会触发 onerror 循环,真正导致循环的是 fallback 资源也 404 且没切断事件链——无论路径是绝对还是相对,只要 this.onerror=null 缺失,就可能卡死。
为什么绝对路径 fallback 还会无限循环
很多人以为写成 /assets/fallback.js 就“更稳”,其实只是把失败时机从跨域/拼写错延后到 CDN 域名下线或部署遗漏。一旦这个绝对路径返回 404,onerror 仍会再次触发(如果没手动清除)。
- 浏览器规范明确:同一个
img或script元素的onerror可触发多次,除非你显式设this.onerror = null -
/fallback.js在 Nginx 返回 404 页面(而非空响应)时,仍算加载失败,会再进一次onerror - 若 fallback 路径指向一个重定向到错误页的地址(如
/404.html),同样触发循环
onerror 中用绝对路径的硬性写法
必须同时满足三件事,缺一不可:
- 赋值新
src或href时,路径要真实可达——建议提前用curl -I /assets/placeholder.svg验证 HTTP 状态码为200 - 立即执行
this.onerror = null,顺序不能颠倒(写在赋值前无效,写在后面才生效) - 避免用带查询参数的绝对路径(如
/fallback.js?v=1),CDN 或代理可能缓存 404 响应,导致后续请求永远不发
正确示例:
@@##@@
错误示例:
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
<script src="https://cdn.com/app.js" onerror="this.src='https://backup.com/app.js'"></script>
(没清空 onerror,且备用域名也可能失效)
绝对路径 fallback 的兼容性陷阱
绝对路径在 file:// 协议下容易出问题,尤其开发阶段双击 HTML 打开时:
-
在file://下会被解析成file:///css/fallback.css,即系统根目录,必然 404 - 解决方案:fallback 路径改用
./css/fallback.css(相对当前 HTML 所在目录),或直接内联 base64 占位图(如data:image/svg+xml;base64,PHN...) - 如果必须用绝对路径,确保它以
http://或https://开头,并且该地址在本地开发服务器上可访问(比如http://localhost:8080/assets/)
最易被忽略的一点:onerror 不是“兜底开关”,而是“失败钩子”——它只告诉你“这次加载失败了”,不保证下一次成功。所有 fallback 路径都得当成生产级资源来验证和部署,否则写得再规范也白搭。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










