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 要素だけをピックアップするようにしても良い。
このように、画像読み込みエラーを割とサクッとチェックできるのでオススメ。