应用接入AMP后图片无法加载,求问题排查与解决方法
我来帮你梳理下从普通<img>切换到<amp-img>后加载失败的常见原因,结合你已经添加AMP头部的情况,重点检查以下几点:
必须指定宽高或响应式布局属性
AMP对图片的尺寸有强制要求,<amp-img>不能仅靠CSS来控制尺寸,必须明确设置width和height属性,或者配合layout属性实现响应式。比如你用的img-fluid是Bootstrap的自适应类,需要搭配AMP的responsive布局:<amp-img src="{{url('storage/images')}}/{{$post->image}}" alt="{{$post->title}}" width="600" height="400" layout="responsive" class="img-fluid" ></amp-img>layout="responsive"会让图片根据容器宽度自动缩放,而width和height是用来计算宽高比的,AMP会提前预留空间,避免布局跳动。确认AMP核心脚本正确加载
光加<html amp>标签还不够,必须在<head>里正确引入AMP的核心脚本,而且要放在头部靠前位置:<script async src="https://cdn.ampproject.org/v0.js"></script>如果脚本缺失或者加载顺序错误,所有AMP组件(包括
<amp-img>)都无法正常初始化。检查图片路径与协议
虽然普通<img>能正常加载,但可以在浏览器开发者工具里查看渲染后的<amp-img>的src属性是否正确。另外,AMP要求生产环境的图片必须使用HTTPS协议,如果你当前是HTTP环境,会被AMP阻止加载资源(本地localhost开发除外)。用AMP验证工具排查错误
AMP有严格的规范校验,任何不符合要求的代码都会导致组件失效。你可以在页面URL末尾加上#development=1,然后打开浏览器控制台(Console),就能看到AMP的具体错误提示,比如缺少宽高属性、脚本加载错误等,这些提示能直接定位问题。清除浏览器缓存测试
有时候浏览器会缓存旧的非AMP页面资源,导致AMP页面的图片加载异常。试试用无痕模式打开页面,或者手动清除浏览器缓存后再测试。排查跨域资源共享(CORS)问题
如果你的图片存储在不同域名下(比如独立的存储服务域名),需要确保图片服务器配置了正确的CORS响应头,允许当前AMP页面的域名访问图片资源——AMP对跨域资源的CORS要求比普通<img>更严格。
内容的提问来源于stack exchange,提问作者mafortis

