Saya memiliki halaman web yang mencakup banyak gambar. Terkadang gambar tidak tersedia, jadi gambar yang rusak ditampilkan di browser klien.
Bagaimana cara menggunakan jQuery untuk mendapatkan set gambar, memfilternya ke gambar yang rusak kemudian mengganti src?
--Saya pikir akan lebih mudah untuk melakukan ini dengan jQuery, tetapi ternyata jauh lebih mudah untuk hanya menggunakan solusi JavaScript murni, yaitu, yang disediakan oleh Prestaul.
javascript
jquery
html
brokenimage
Dan Lord
sumber
sumber
Saya menggunakan
error
handler bawaan:Edit: The
error()
Metode ini usang dalam jquery 1,8 dan lebih tinggi. Sebagai gantinya, Anda sebaiknya menggunakan.on("error")
:sumber
Jika seseorang seperti saya, cobalah untuk melampirkan
error
acara tersebut ke HTML dinamisimg
tag , saya ingin menunjukkan bahwa:Rupanya
img
acara kesalahan tidak menggelembung di sebagian besar browser, bertentangan dengan standar apa dikatakan .Jadi, sesuatu seperti yang berikut ini tidak akan berfungsi :
Semoga ini bisa membantu orang lain. Saya berharap saya telah melihat ini di sini di utas ini. Tapi saya tidak melakukannya. Jadi, saya menambahkannya
sumber
Berikut ini adalah solusi mandiri:
sumber
$.browser
telah ditinggalkan dan dihapus sekarang, gunakan deteksi fitur (semakin rumit dalam kasus ini).204 No Content
itu akan menjadi gambar yang rusak.Saya percaya ini yang Anda cari: jQuery.Preload
Berikut ini contoh kode dari demo, Anda menentukan pemuatan dan tidak menemukan gambar dan Anda siap:
sumber
Sumber: http://www.developria.com/2009/03/jquery-quickie---broken-images.html
sumber
Sementara OP sedang mencari untuk mengganti SRC, saya yakin banyak orang yang memukul pertanyaan ini mungkin hanya ingin menyembunyikan gambar yang rusak, dalam hal ini solusi sederhana ini bekerja sangat baik untuk saya.
Menggunakan JavaScript Inline:
Menggunakan JavaScript Eksternal:
Menggunakan JavaScript Eksternal Modern:
Lihat dukungan browser untuk fungsi NoteList.forEach dan panah .
sumber
Berikut adalah cara cepat dan kotor untuk mengganti semua gambar yang rusak, dan tidak perlu mengubah kode HTML;)
contoh codepen
sumber
Saya tidak dapat menemukan skrip yang sesuai dengan kebutuhan saya, jadi saya membuat fungsi rekursif untuk memeriksa gambar yang rusak dan berusaha memuatnya kembali setiap empat detik hingga diperbaiki.
Saya membatasinya menjadi 10 upaya seolah-olah itu tidak dimuat maka gambar mungkin tidak ada di server dan fungsinya akan memasuki infinite loop. Saya masih mengujinya. Jangan ragu untuk mengubahnya :)
sumber
Ini adalah teknik yang jelek, tapi cukup dijamin:
sumber
Anda dapat menggunakan pengambilan GitHub sendiri untuk ini:
Frontend: https://github.com/github/fetch
atau untuk Backend, versi Node.js: https://github.com/bitinn/node-fetch
Sunting: Metode ini akan menggantikan XHR dan seharusnya sudah ada di Chrome. Untuk siapa pun yang membaca ini di masa mendatang, Anda mungkin tidak perlu menyertakan perpustakaan yang disebutkan di atas.
sumber
Ini JavaScript, harus kompatibel lintas browser, dan dikirim tanpa markup jelek
onerror=""
:CODEPEN:
sumber
while (i--)
Lebih baik menggunakan panggilan
Karena menggunakan
document.ready
tidak perlu menyiratkan bahwa gambar dimuat, hanya HTML. Dengan demikian, tidak perlu untuk panggilan yang tertunda.sumber
CoffeeScriptVarian :
Saya membuatnya untuk memperbaiki masalah dengan Turbolinks yang menyebabkan metode .error () muncul di Firefox kadang-kadang meskipun gambarnya benar-benar ada.
sumber
Dengan menggunakan jawaban Prestaul , saya menambahkan beberapa cek dan saya lebih suka menggunakan cara jQuery.
sumber
Jika Anda telah memasukkan Anda
img
denganinnerHTML
, seperti:$("div").innerHTML = <img src="wrong-uri">
, Anda dapat memuat gambar lain jika gagal melakukan, misalnya, ini:Mengapa
javascript: _
dibutuhkan? Karena skrip yang disuntikkan ke DOM melalui tag skrip dalaminnerHTML
tidak berjalan pada saat disuntikkan, jadi Anda harus eksplisit.sumber
Saya menemukan posting ini sambil melihat posting SO lainnya ini . Di bawah ini adalah salinan dari jawaban yang saya berikan di sana.
Saya tahu ini adalah utas lama, tetapi Bereaksi menjadi populer dan, mungkin, seseorang yang menggunakan Bereaksi akan datang ke sini mencari jawaban untuk masalah yang sama.
Jadi, jika Anda menggunakan React, Anda dapat melakukan sesuatu seperti di bawah ini, yang merupakan jawaban asli yang diberikan oleh Ben Alpert dari tim React di sini
sumber
Saya membuat biola untuk mengganti gambar yang rusak menggunakan acara "onerror". Ini dapat membantu Anda.
sumber
Berikut adalah contoh menggunakan objek Gambar HTML5 yang dibungkus oleh JQuery. Panggil fungsi pemuatan untuk URL gambar utama dan jika pemuatan itu menyebabkan kesalahan, ganti atribut src dari gambar dengan URL cadangan.
sumber
JS murni. Tugas saya adalah: jika gambar 'bl-once.png' kosong -> masukkan yang pertama (yang tidak memiliki status 404) gambar dari daftar array (dalam direktori saat ini):
Mungkin perlu ditingkatkan, tetapi:
Jadi, itu akan memasukkan 'diperlukan.png' yang benar ke src saya atau 'no-image.png' dari dir saat ini.
sumber
Saya tidak yakin apakah ada cara yang lebih baik, tapi saya bisa memikirkan hack untuk mendapatkannya - Anda bisa Ajax memposting ke URL img, dan mengurai respons untuk melihat apakah gambar benar-benar kembali. Jika kembali sebagai 404 atau sesuatu, maka tukar keluar img. Meskipun saya berharap ini sangat lambat.
sumber
Saya memecahkan masalah saya dengan dua fungsi sederhana ini:
sumber
jQuery 1.8
jQuery 3
referensi
sumber
Saya rasa saya memiliki cara yang lebih elegan dengan delegasi acara dan event menangkap di
window
'serror
bahkan ketika gambar cadangan gagal untuk beban.Intinya adalah :
Masukkan kode ke dalam
head
dan dieksekusi sebagai skrip inline pertama. Jadi, itu akan mendengarkan kesalahan yang terjadi setelah skrip.Gunakan menangkap peristiwa untuk menangkap kesalahan, terutama untuk peristiwa yang tidak menggelembung.
Gunakan delegasi acara yang menghindari peristiwa mengikat pada setiap gambar.
Berikan
img
elemen kesalahan atribut setelah memberi mereka abackup.png
untuk menghindari hilangnyabackup.png
loop tak terhingga dan selanjutnya seperti di bawah ini:img error-> backup.png-> error-> backup.png-> error -> ,,,,,
sumber
let isImgErrorHandled = target.src === 'backup.png';
karena menyederhanakan sedikit.target.src='backup.png'
tapi lain kaliconsole.log(target.src)
mungkin tidakbackup.png
Anda dapat melewati jalur placeholder dan mengakses semua properti dari objek gambar yang gagal melalui
$*
:http://jsfiddle.net/ARTsinn/Cu4Zn/
sumber
Ini telah membuat saya frustasi selama bertahun-tahun. Perbaikan CSS saya menetapkan gambar latar belakang pada
img
. Saat gambar dinamissrc
tidak dimuat ke latar depan, placeholder terlihatimg
di bg. Ini berfungsi jika gambar Anda memiliki ukuran default (misalnyaheight
,min-height
,width
dan / ataumin-width
).Anda akan melihat ikon gambar yang rusak tetapi ini merupakan peningkatan. Diuji ke IE9 berhasil. iOS Safari dan Chrome bahkan tidak menampilkan ikon yang rusak.
Tambahkan sedikit animasi untuk memberi
src
waktu memuat tanpa flicker latar belakang. Chrome memudar di latar belakang dengan lancar tetapi desktop Safari tidak.sumber
Jika gambar tidak dapat dimuat (misalnya, karena tidak ada di URL yang disediakan), URL gambar akan diubah menjadi default,
Untuk selengkapnya tentang .error ()
sumber
Saya mendapat masalah yang sama. Kode ini berfungsi dengan baik pada kasus saya.
sumber
Terkadang menggunakan
error
acara tersebut tidak layak, misalnya karena Anda mencoba melakukan sesuatu pada halaman yang sudah dimuat, seperti ketika Anda menjalankan kode melalui konsol, bookmarklet, atau skrip yang dimuat secara tidak sinkron. Dalam hal itu, periksa ituimg.naturalWidth
danimg.naturalHeight
0 sepertinya melakukan trik.Misalnya, inilah cuplikan untuk memuat ulang semua gambar yang rusak dari konsol:
sumber
Saya menemukan ini berfungsi paling baik, jika ada gambar gagal memuat pertama kali, itu sepenuhnya dihapus dari DOM. Eksekusi
console.clear()
menjaga jendela konsol tetap bersih, karena kesalahan 404 tidak dapat dihilangkan dengan blok coba / tangkap.sumber