Web ページ中の画像が読み込めなかった時に処理させる

Web ページ中の img 要素が画像を読み込めなかった場合、Error イベントが発火することを知った。

つまり、onerror 属性などで Error イベントを拾ってやれば、その img 要素を目立たせたりとか、要素ごと削除したりとか、好きな処理ができるというワケだ。開発中に画像がちゃんと貼れているか確認したり、画像リンクが切れているところをログに残したりできるだろう。

目次

サンプル

以下にサンプルを作ってみた。

onerror 属性を書いてみる

まずはシンプルに、img 要素に onerror 属性を書いてみる。

<img src="not-found.jpg" onerror="this.style.border = '5px solid red';">

以下のように DOM 操作してやれば、img 要素を削除できる。

<img src="not-found.jpg" onerror="this.parentNode.removeChild(this);">

JavaScript で一括指定する

実際は HTML 中に onerror 属性を書くのは気が引けるので、JavaScript 側だけで一括処理するようにする。

// window.onload 前に処理を入れておく
document.addEventListener('DOMContentLoaded', () => {
  // ページ中の img 要素を全て取得する
  const imgElems = document.querySelectorAll('img');
  for(const imgElem of imgElems) {
    // 各 img 要素に Error イベント時の処理を付与する
    imgElem.addEventListener('error', (event) => {
      // ココでは枠付けするようにしたが、要素の削除などにしても良い
      imgElem.style.border = '5px dashed red';
    });
  }
});

こうすれば、読み込めなかった画像の情報を console.log() に出すなどの処理も自由に変更できるだろう。querySelectorAll() の範囲を狭めて、確認したい箇所の img 要素だけをピックアップするようにしても良い。


このように、画像読み込みエラーを割とサクッとチェックできるのでオススメ。