このページの興味深いソリューションを読んだ後、SLaks と Noyo の投稿に大きく影響された使いやすいソリューションを作成しました。このソリューションは、(執筆時点で) Chrome、IE、Firefox、Safari、およびOpera(すべてWindows上)。また、私が使用した iPhone/iPad エミュレーターでも動作しました。
このソリューションと SLaks および Noyo の投稿との主な違いの 1 つは、このソリューションが主に naturalWidth および naturalHeight プロパティをチェックすることです。現在のブラウザー バージョンでは、これら 2 つのプロパティが最も有用で一貫した結果を提供しているように見えます。
このコードは、画像が完全に読み込まれ、かつ正常に読み込まれた場合に TRUE を返します。画像がまだ完全にロードされていないか、ロードに失敗した場合、FALSE を返します。
画像が 0x0 ピクセル画像の場合、この関数も FALSE を返すことに注意してください。しかし、これらの画像は非常にまれであり、0x0 ピクセルの画像がまだ読み込まれているかどうかを確認するのに役立つ非常に便利なケースは思いつきません :)
最初に、"isLoaded" という新しい関数を HTMLImageElement プロトタイプに追加して、この関数を任意の画像要素で使用できるようにします。
HTMLImageElement.prototype.isLoaded = function() {
// See if "naturalWidth" and "naturalHeight" properties are available.
if (typeof this.naturalWidth == 'number' && typeof this.naturalHeight == 'number')
return !(this.naturalWidth == 0 && this.naturalHeight == 0);
// See if "complete" property is available.
else if (typeof this.complete == 'boolean')
return this.complete;
// Fallback behavior: return TRUE.
else
return true;
};
次に、画像の読み込みステータスを確認する必要があるときはいつでも、「isLoaded」関数を呼び出します。
if (someImgElement.isLoaded()) {
// YAY! The image loaded
}
else {
// Image has not loaded yet
}
SLaks と Noyo の投稿に対する giorgian のコメントによると、SRC 属性の変更を計画している場合、このソリューションは Safari Mobile での 1 回限りのチェックとしてしか使用できない可能性があります。ただし、既存の画像要素の SRC 属性を変更する代わりに、新しい SRC 属性を使用して画像要素を作成することで、これを回避できます。