¿Hay alguna manera de determinar si la ruta de una imagen conduce a una imagen real, es decir, detectar cuando una imagen no se carga en Javascript?
Para una aplicación web, estoy analizando un archivo xml y creando dinámicamente imágenes HTML a partir de una lista de rutas de imágenes. Es posible que algunas rutas de imagen ya no existan en el servidor, por lo que quiero fallar con elegancia al detectar qué imágenes no se cargan y eliminar ese elemento img HTML.
Tenga en cuenta que las soluciones de JQuery no podrán usarse (el jefe no quiere usar JQuery, sí, sé que no me ayude a comenzar). Conozco una forma en JQuery de detectar cuándo se carga una imagen, pero no si falló.
Mi código para crear elementos img, pero ¿cómo puedo detectar si la ruta img conduce a una imagen que no se pudo cargar?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
fuente
Respuestas:
Puedes probar el siguiente código. Sin embargo, no puedo garantizar la compatibilidad del navegador, así que tendrás que probarlo.
¡Y mis condolencias por el jefe resistente a jQuery!
fuente
La respuesta es buena, pero presenta un problema. Siempre que asigne
onload
oonerror
directamente, puede reemplazar la devolución de llamada que se asignó anteriormente. Es por eso que hay un buen método que "registra el oyente especificado en el EventTarget al que se llama", como dicen en MDN . Puede registrar tantos oyentes como desee en el mismo evento.Déjame reescribir un poco la respuesta.
Debido a que el proceso de carga de recursos externos es asincrónico, sería aún mejor usar JavaScript moderno con promesas, como las siguientes.
fuente
Esta:
fuente
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
fuente
jQuery + CSS para img
Con jQuery esto me funciona:
Y puedo usar esta imagen en cualquier lugar de mi sitio web sin importar su tamaño con la siguiente propiedad CSS3:
CSS solo para background-img
Para las imágenes de fondo que faltan, también agregué lo siguiente en cada
background-image
declaración:Lado del servidor Apache
Otra solución es detectar la imagen que falta con Apache antes de enviarla al navegador y reemplazarla por el contenido predeterminado no-img.png.
fuente
Aquí hay una función que escribí para otra respuesta: Javascript Image Url Verify . No sé si es exactamente lo que necesita, pero utiliza las diversas técnicas que utilizaría que incluyen controladores para
onload
,onerror
,onabort
y un tiempo de espera general.Debido a que la carga de imágenes es asincrónica, llama a esta función con su imagen y luego llama a su devolución de llamada en algún momento posterior con el resultado.
fuente
como a continuación:
fuente