【问题标题】:Is there any way to use onerror() attribute in <amp-img>有没有办法在 <amp-img> 中使用 onerror() 属性
【发布时间】:2017-11-17 17:53:09
【问题描述】:

有没有办法在&lt;amp-img&gt; 中使用 onerror 属性?

它在 html 中运行良好。

<img src="../images/some-logo1.jpg" onerror="this.src='../images/no-img.jpg';" class="posting-logo-img">

但是 amp html 会在 amp-img 中创建 img 标签

<amp-img src="/img/amp.jpg" alt="AMP" class="posting-logo-img" onerror="this.src='../images/no-img.jpg';" >
  <noscript>
    <img src="/img/amp.jpg" alt="AMP"> 
  </noscript>
</amp-img>

【问题讨论】:

  • 没有。来自文档:Attribute names starting with on (such as onclick or onmouseover) are disallowed in AMP HTMLampproject.org/docs/reference/spec#html-attributes。老实说,这是一件好事。 on* 事件属性无论如何都非常过时,不应使用。而是将一个不显眼的事件处理程序挂钩到元素 - 大概这会呈现标准的 &lt;img /&gt; 元素?

标签: html amp-html amp-img


【解决方案1】:

我们不能在amp-img 中使用onerror 属性,但是提供Offline Fallback 功能而不是onerror

amp-img 支持 AMP 的常用属性,这意味着您可以在图片无法加载时显示回退。这非常适合为您的 AMP 添加离线支持。

当原始图像不可用或返回 404 时,这将为您提供您在 fallback div 中提供的文本输出:

<style amp-custom>
  amp-img > div[fallback] {
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f2f2f2;
    border: solid 1px #ccc;
  }
</style>

<amp-img src="/img/product-image.jpg" width="300" height="100" layout="responsive" class="m1">
    <div fallback>offline</div>
</amp-img>

输出:

现在,如果您想在未找到原始图像时显示任何图像(例如无图像)而不是文本,则为 fallback div

设置 背景图像
<style amp-custom>    
  amp-img > div[fallback] {
     background:url('/img/does-not-exist.jpg') no-repeat;
  }
</style>

<amp-img src="/img/product-image.jpg" width="300" height="100" layout="responsive" class="m1">
    <div fallback></div>
</amp-img>

输出:

见官方文档:Amp Image - Offline Fallback

【讨论】:

  • 感谢@GuRu 它在原始图像不可用时的工作。
  • 很高兴帮助你@dom
  • 你节省了我的时间,非常感谢@GuRu