2010-01-12 9 views
12

Parece que hay algunas maneras de manejar imágenes rotas en una página html. Me gustaría saber qué formas tienen de uso popular y qué formas se consideran mejores prácticas.¿Cuál es la forma óptima de manejar imágenes rotas?

Para iniciar He mirado en algún mí me gustan:

function imgErr(source) {  
    source.src = /images/missing.jpg"; 
    source.onerror = ""; 
    return true; 
} 
<img src="test.jpg" alt="test" title="test" onerror="imgErr(this);" /> 

Pros: trabaja cada vez, el evento siempre será capturado. El usuario nunca ve una imagen rota. Parece funcionar bien en todos los navegadores. Contras: Etiqueta onerror requerida en cada imagen, la función imgErr (fuente) tiene que estar en la cabeza para atrapar a los errores, ralentiza los usuarios experimentaron el tiempo de carga

$('img').error(function(){ 
    $(this).attr('src', 'missing.jpg'); 
}); 

Pros: muy poco código, funciona en todas las imágenes sin cambiar su margen de beneficio, puede ser lugar fuera de la cabeza Contras: puede perderse el evento de error en función de la velocidad de las páginas de eventos onload, ralentiza los usuarios experimentados tiempo de carga

$(window).load(function() { 
    $("img").each(function() { 
     if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) { 
      var src = $(this).attr("src"); 
      var suffix = src.substring(src.length - 6, src.length).split('.')[0]; 
      suffix = suffix.charAt(suffix.length - 1);    
      $(this).attr("src", "/static/images/generic/missing_" + suffix + ".jpg"); 
     } 
    }); 
}); 

Pros: puede ser colocado en cualquier lugar en la página, arreglará las imágenes sin importar cuándo se ejecute, no ralentiza al usuario s tiempo de carga experimentado Contras: muestra una imagen rota hasta que se ejecuta creando una experiencia de usuario pobre

En mi situación, el tiempo de carga es el mayor problema pero no puedo obtener la última opción para trabajar en IE correctamente, ya que cambia ¡y ninguna imagen rota por igual!

Saludos, Denis

Respuesta

10

Un pensamiento que no vienen a la mente es la de crear un controlador de imagen en su servidor web, es decir

<img src="fetchimage.aspx?name=test.jpg" alt="test" title="test" /> 

Ignorar el aspx, es obvio que había sustituirse con cualquier su tecnología preferida de scripting del servidor era. Ese controlador puede tratar con los nombres de las imágenes que no están presentes entregando su missing.jpg para todos los nombres de imágenes desconocidas.

Aparte de eso, estás atascado con las opciones que das por lo que puedo ver. Cualquier javascript que se ejecute antes de que la página cargue los riesgos de no iterar sobre las etiquetas de img que aún no se han recibido y cualquier secuencia de comandos que espere a la página correrá el riesgo de que el usuario vea imágenes rotas.

Rock-> Usted < -Hardplace

+4

Una variación de esta respuesta puede ser dejar un mango solicitudes isapi-filtro/apache-mod para las extensiones de archivo de imagen común de manera que no es necesario cambiar toda tu img src atributos para que apunte a su manejador . – grenade

+0

Estoy de acuerdo con esto.Un gestor genérico sería mi elección si yo fuera inflexible sobre la fijación de imágenes rotas. – CeejeeB

+0

¡Esta podría ser una opción que debería considerar con MVC, pero esperaba haber podido mantenerla simple en el lado del servidor! –

0

En mi opinión, utilizando la etiqueta alt es suficiente y no hay necesidad de añadir complejidad a la página mediante la comprobación de que cada vez que el uso de JavaScript.

Por supuesto, necesita comprobar de vez en cuando que no tiene una imagen rota. There are tools to do it.

+0

¿No sería genial si no tuviéramos clientes/jefes y la apariencia no fuera todo: D –

+0

@marcgg No estoy de acuerdo. Hay muchas circunstancias en las que una imagen de marcador de posición puede contribuir a la estética de una página. Por ejemplo, un catálogo de productos puede contener muchos productos para los cuales todavía no se ha proporcionado una imagen. Un controlador inteligente de imágenes faltante puede sustituir una imagen de producto genérica en la categoría correcta para el producto. – grenade

+0

Eso sería realmente bueno ... – marcgg

0

Idealmente, la etiqueta alt debería ser utilizada. Si esto es vital, la solución javascript realmente no es ideal porque no funcionará si JS está apagado. Sin embargo, podría hacer una especie de solución del lado del servidor. Algo en php podría hacerse así, pero requeriría una base de datos o algún tipo de forma de configuración de variables.

<?php 
if($image !== ''){?> 
<?php echo '<img src="$imgsrc" alt="$imgalt" />' ?> 
} 
<?php else { 
<?php echo '<img src="$imgmissing" alt="$imgalt" />' ?> 
} ?> 
<?php } ?> 
Cuestiones relacionadas