Apakah ada cara untuk menentukan apakah jalur gambar mengarah ke gambar yang sebenarnya, yaitu mendeteksi ketika gambar gagal dimuat di Javascript.
Untuk aplikasi web, saya mengurai file xml dan secara dinamis membuat gambar HTML dari daftar jalur gambar. Beberapa jalur gambar mungkin tidak lagi ada di server, jadi saya ingin gagal dengan baik dengan mendeteksi gambar mana yang gagal dimuat dan menghapus elemen img HTML itu.
Catatan solusi JQuery tidak akan dapat digunakan (bos tidak ingin menggunakan JQuery, ya saya tahu jangan mulai saya). Saya tahu cara di JQuery untuk mendeteksi saat gambar dimuat, tetapi tidak mengetahui apakah gambar tersebut gagal.
Kode saya untuk membuat elemen img tetapi bagaimana saya bisa mendeteksi jika jalur img mengarah ke gambar yang gagal dimuat?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
sumber
Jawaban:
Anda bisa mencoba kode berikut. Saya tidak dapat menjamin kompatibilitas browser, jadi Anda harus mengujinya.
Dan simpati saya untuk bos tahan jQuery!
sumber
Jawabannya bagus, tapi ini menimbulkan satu masalah. Setiap kali Anda menetapkan
onload
atauonerror
secara langsung, itu mungkin menggantikan panggilan balik yang telah ditetapkan sebelumnya. Itulah mengapa ada metode bagus yang "mendaftarkan pendengar yang ditentukan di EventTarget tempat itu dipanggil" seperti yang mereka katakan di MDN . Anda dapat mendaftarkan pendengar sebanyak yang Anda inginkan di acara yang sama.Izinkan saya menulis ulang jawabannya sedikit.
Karena proses pemuatan sumber daya eksternal tidak sinkron, akan lebih baik jika menggunakan JavaScript modern dengan promise, seperti berikut ini.
sumber
Ini:
sumber
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
sumber
jQuery + CSS untuk img
Dengan jQuery, ini berfungsi untuk saya:
Dan saya dapat menggunakan gambar ini di mana pun di situs web saya terlepas dari ukurannya dengan properti CSS3 berikut:
CSS hanya untuk background-img
Untuk gambar latar belakang yang hilang, saya juga menambahkan yang berikut pada setiap
background-image
deklarasi:Sisi server Apache
Solusi lain adalah mendeteksi gambar yang hilang dengan Apache sebelum dikirim ke browser dan menggantinya dengan konten default no-img.png.
sumber
Berikut adalah fungsi yang saya tulis untuk jawaban lain: Verifikasi Url Gambar Javascript . Saya tidak tahu apakah itu apa yang Anda butuhkan, tetapi menggunakan berbagai teknik yang Anda akan menggunakan yang meliputi penangan untuk
onload
,onerror
,onabort
dan timeout umum.Karena pemuatan gambar tidak sinkron, Anda memanggil fungsi ini dengan gambar Anda dan kemudian memanggil panggilan balik Anda beberapa saat kemudian dengan hasilnya.
sumber
seperti di bawah ini:
sumber