Tengo una página web que incluye un montón de imágenes. A veces la imagen no está disponible, por lo que se muestra una imagen rota en el navegador del cliente.
¿Cómo uso jQuery para obtener el conjunto de imágenes, filtrarlo a imágenes rotas y luego reemplazar el src?
Pensé que sería más fácil hacer esto con jQuery, pero resultó mucho más fácil usar una solución de JavaScript pura, es decir, la que proporcionó Prestaul.
javascript
jquery
html
brokenimage
Dan Lord
fuente
fuente

Yo uso el
errorcontrolador incorporado :Editar: El
error()método está en desuso en jquery 1.8 y superior. En su lugar, debe usar.on("error")en su lugar:fuente
En caso de que alguien como yo intente adjuntar el
errorevento a unaimgetiqueta HTML dinámica , me gustaría señalar que hay un problema:Aparentemente,
imglos eventos de error no aparecen en la mayoría de los navegadores, al contrario de lo que dice el estándar .Entonces, algo como lo siguiente no funcionará :
Espero que esto sea útil para alguien más. Desearía haber visto esto aquí en este hilo. Pero no lo hice. Entonces, lo estoy agregando
fuente
Aquí hay una solución independiente:
fuente
$.browserha sido desaprobado y eliminado ahora, use la detección de funciones en su lugar (se vuelve más complicado en este caso).204 No Content, sería una imagen rota.Creo que esto es lo que buscas : jQuery.Preload
Aquí está el código de ejemplo de la demostración, especifica la carga y las imágenes no encontradas y ya está todo listo:
fuente
Fuente: http://www.developria.com/2009/03/jquery-quickie---broken-images.html
fuente
Si bien el OP estaba buscando reemplazar el SRC, estoy seguro de que muchas personas que respondieron a esta pregunta solo desean ocultar la imagen rota, en cuyo caso esta solución simple funcionó muy bien para mí.
Usando JavaScript en línea:
Usando JavaScript externo:
Usando JavaScript externo moderno:
Consulte el soporte del navegador para NoteList.forEach y las funciones de flecha .
fuente
Aquí hay una manera rápida y sucia de reemplazar todas las imágenes rotas, y no hay necesidad de cambiar el código HTML;)
ejemplo de codepen
fuente
No pude encontrar un script que se adaptara a mis necesidades, por lo que hice una función recursiva para verificar si hay imágenes rotas e intentar volver a cargarlas cada cuatro segundos hasta que se arreglen.
Lo limité a 10 intentos como si no estuviera cargado para entonces, la imagen podría no estar presente en el servidor y la función entraría en un bucle infinito. Aunque todavía estoy probando. Siéntase libre de modificarlo :)
fuente
Esta es una técnica horrible, pero está prácticamente garantizada:
fuente
Puede usar la propia búsqueda de GitHub para esto:
Frontend: https://github.com/github/fetch
o para Backend, una versión de Node.js: https://github.com/bitinn/node-fetch
Editar: este método reemplazará a XHR y supuestamente ya ha estado en Chrome. Para cualquiera que lea esto en el futuro, es posible que no necesite la biblioteca mencionada incluida.
fuente
Este es JavaScript, debe ser compatible con varios navegadores y se entrega sin el marcado feo
onerror="":CODEPEN:
fuente
while (i--)Mejor llamada usando
Porque el uso
document.readyno necesariamente implica que las imágenes se carguen, solo el HTML. Por lo tanto, no hay necesidad de una llamada retrasada.fuente
Variante CoffeeScript :
Lo solucioné para solucionar un problema con Turbolinks que hace que el método .error () aparezca en Firefox a veces a pesar de que la imagen está realmente allí.
fuente
Al usar la respuesta de Prestaul , agregué algunas comprobaciones y prefiero usar la forma jQuery.
fuente
Si ha insertado su
imgconinnerHTML, como:,$("div").innerHTML = <img src="wrong-uri">puede cargar otra imagen si no funciona, por ejemplo, esto:¿Por qué es
javascript: _necesario? Debido a que las secuencias de comandos inyectadas en el DOM mediante etiquetas de secuencia de comandosinnerHTMLno se ejecutan en el momento en que se inyectan, debe ser explícito.fuente
Encontré esta publicación mientras miraba esta otra publicación SO . A continuación hay una copia de la respuesta que di allí.
Sé que este es un hilo viejo, pero React se ha vuelto popular y, tal vez, alguien que usa React vendrá aquí buscando una respuesta al mismo problema.
Entonces, si está usando React, puede hacer algo como lo siguiente, que fue una respuesta original proporcionada por Ben Alpert del equipo React aquí
fuente
Creé un violín para reemplazar la imagen rota usando el evento "onerror". Esto puede ayudarte.
fuente
Aquí hay un ejemplo usando el objeto de imagen HTML5 envuelto por JQuery. Llame a la función de carga para la URL de la imagen principal y si esa carga causa un error, reemplace el atributo src de la imagen con una URL de respaldo.
fuente
JS puro. Mi tarea era: si la imagen 'bl-once.png' está vacía -> inserte la primera imagen (que no tiene estado 404) de la lista de matriz (en el directorio actual):
Tal vez necesita ser mejorado, pero:
Por lo tanto, insertará el correcto 'needed.png' en mi src o 'no-image.png' desde el directorio actual.
fuente
No estoy seguro de si hay una mejor manera, pero puedo pensar en un truco para obtenerlo: podría publicar Ajax en la URL de img y analizar la respuesta para ver si la imagen realmente regresó. Si volvió como un 404 o algo así, cambie el img. Aunque espero que esto sea bastante lento.
fuente
Resolví mi problema con estas dos funciones simples:
fuente
jQuery 1.8
jQuery 3
referencia
fuente
Creo que tengo una forma más elegante con la delegación de eventos y captura de eventos en
window'serrorincluso cuando la imagen de copia de seguridad no se pueden cargar.La cuestión es :
Ponga el código en
heady ejecutado como el primer script en línea. Entonces, escuchará los errores que suceden después del guión.Use la captura de eventos para detectar los errores, especialmente para aquellos eventos que no burbujean.
Utilice la delegación de eventos que evita eventos vinculantes en cada imagen.
Otorgue
imgun atributo al elemento de error después de otorgarles unbackup.pngpara evitar la desaparición delbackup.pngbucle infinito y posterior como se muestra a continuación:img error-> backup.png-> error-> backup.png-> error -> ,,,,,
fuente
let isImgErrorHandled = target.src === 'backup.png';ya que simplifica un poco.target.src='backup.png'pero la próxima vezconsole.log(target.src)puede no serbackup.pngPuede pasar una ruta de marcador de posición y acceder a ella todas las propiedades del objeto de imagen fallido a través de
$*:http://jsfiddle.net/ARTsinn/Cu4Zn/
fuente
Esto me ha estado frustrando durante años. Mi corrección de CSS establece una imagen de fondo en el
img. Cuando una imagen dinámicasrcno se carga en primer plano, se visualiza un marcador de posición en elimgbg del 's. Esto funciona si las imágenes tienen un tamaño predeterminado (por ejemploheight,min-height,widthy / omin-width).Verá el icono de imagen rota, pero es una mejora. Probado hasta IE9 con éxito. iOS Safari y Chrome ni siquiera muestran un ícono roto.
Agregue una pequeña animación para dar
srctiempo a cargar sin un parpadeo de fondo. Chrome se desvanece en el fondo sin problemas, pero Safari de escritorio no.fuente
Si la imagen no se puede cargar (por ejemplo, porque no está presente en la URL suministrada), la URL de la imagen se cambiará a predeterminada,
Para más información sobre .error ()
fuente
Tengo el mismo problema. Este código funciona bien en mi caso.
fuente
A veces, utilizar el
errorevento no es factible, por ejemplo, porque está intentando hacer algo en una página que ya está cargada, como cuando ejecuta código a través de la consola, un marcador o un script cargado de forma asincrónica. En ese caso, verificar esoimg.naturalWidthyimg.naturalHeightson 0 parece ser el truco.Por ejemplo, aquí hay un fragmento para volver a cargar todas las imágenes rotas desde la consola:
fuente
Encontré que esto funciona mejor, si alguna imagen no se carga la primera vez, se elimina completamente del DOM. La ejecución
console.clear()mantiene limpia la ventana de la consola, ya que los errores 404 no se pueden omitir con los bloques try / catch.fuente