img.addEventListener('error', function () {
if (this.dataset.fallback) return;
this.dataset.fallback = '1';
this.src = '/static/placeholder.png';
}, { once: true });
迁移后附件路径错了,列表里十几张图全变成破图图标,alt 里的长标题在图片框里折成两行,把整行卡片高度顶高了一截。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:img 加载失败后浏览器会渲染 alt 文本和破损图标,容器又没有兜底背景。模板里没监听 error 事件,失败的图片就一直占着位置。
围绕「图片加载失败兜底」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:给图片容器一个浅灰占位背景,加载失败时看起来是空块而不是破图;监听 error 事件,把 src 换成站内默认图,只换一次,避免死循环;装饰性图片 alt 留空,别把标题塞进去,失败时就不会挤出一堆字。
确认没问题再收工,故意把一张图改成不存在的地址,列表里显示灰色占位图,卡片高度不变。
