• Miércoles 15 de Mayo de 2024, 06:34

Autor Tema:  Imágenes:controlar Si Se Han Cargado Correctamente  (Leído 2319 veces)

Sasi

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Imágenes:controlar Si Se Han Cargado Correctamente
« en: Martes 19 de Julio de 2005, 17:41 »
0
Hola, necesito vuestra ayuda:

Necesito saber como recargar una imágen desde javascript, si no se ha cargado correctamente y la imágen existe.

Estoy creando una aplicación de mapas, para lo cual utilizo un programa llamado Mapserver. Mi problema es el siguiente:
El mapserver genera imágenes(gifs) dándole una serie de parámetros(longitud, latitud, anchura,altura,  zoom etc).  Para generar una imagen de una zona determinada, puedes dibujar la imagen completa, o a trozos y montarla mediante html. Este es mi caso, para lo cual creo dinámicamente objetos img con javascript y les doy como src la imagen que creará el mapserver.
Esto que en firefox funciona de perlas, en Internet Explorer no funciona del todo, ya que  algunos imgs generados dinámicamente no muestran la imágen. Creo que el problema está en que el mapserver tarda demasiado en crear algunas imágenes para el IE. El mapa aparece corectamente quitando algunas zonas donde aparece rl típico cuadrado con el aspa roja a la derecha diciendo que no se ha encontrado la imagen. Pero si hago botón derecho en la imagen no cargada y "Mostrar imagen" la imagen se muestra correctamente.

No se si me he explicado bien.


Estoy desesperado.....
Sasi guztien gainetik, hodei guztien azpitik.
Por encima de todas las zarzas, por debajo de todas las nubes.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Imágenes:controlar Si Se Han Cargado Correctamente
« Respuesta #1 en: Martes 19 de Julio de 2005, 18:15 »
0
Pues se me ocurren varias soluciones, pero como todo habría que ver como funcionan con el amigo IE...

Por un lado sería recomendable que uses la propiedad OnLoad de las imágenes.


Supongamos que tienes 5 imágenes (con id "img_" + el número de imágen), ejecutas el onload para chequear las que se cargaron, y por otro lado a cada imagen le colocas un campo hidden, con id (por ejemplo) "himg_" + el numero de imagen, y con value = 0.

for(d=1;d<5;d++){
   imagen[d] = new Image();
   imagen[d].onLoad = cargada(d);
}

function cargada(d){
   document.getElementById('himg_'+d).value = 1;
}


Esto hará que una vez que se termine de cargar cada una de las imágenes, cada campo hidden se marquen en 1, por lo que los que queden en 0, serán imágenes sin terminar de cargar.
Luego con ayuda de un timer, al pasar por ejemplo un minuto , ejecutas una función para chequear cuales no se han cargado aún y forzar su carga:

function chequear(){
   for(d=1;d<5;d++){
      if(document.getElementById('himg_'+d).value == 0){
         document.getElementById('img_'+d).src = 'imagen_'+d+'.gif';
      }
   }
}

Si quieres, en lugar de usar un hidden por imágen, puede almacenar todo eso uno solo en forma de string (por ejemplo 1/2/3/5), donde el número que falte será la imágen sin cargar.


Espero que te sirva.
Altareum.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

Sasi

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Imágenes:controlar Si Se Han Cargado Correctamente
« Respuesta #2 en: Miércoles 20 de Julio de 2005, 11:03 »
0
Gracias, casi he solucionado el problema. Decirte que en vez de
 imagen[d].onLoad = cargada(d);
he tenido que poner
imagen[d].onload= function(){
    document.getElementById('himg_'+d).value = 1;
}

Ahora el problema lo tengo con el timer; no se cuanto tiempo poner, esto dependerá mucho de la conexión del usuario. A ver como lo soluciono.

Muchas gracias por todo
Sasi guztien gainetik, hodei guztien azpitik.
Por encima de todas las zarzas, por debajo de todas las nubes.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Imágenes:controlar Si Se Han Cargado Correctamente
« Respuesta #3 en: Miércoles 20 de Julio de 2005, 17:24 »
0
Pues... como te decía, llamalo con el evento onLoad de la etiqueta BODY. Esto hará que la función sea invocada cuando la página termine de cargarse.
Aunque no estoy seguro como quedará si algunas imágenes no terminan de cargarse  &lt;_&lt;

Bueno, prueva con eso y dime como te fue.
Altareum.

PD: perdón por el error del  imagen[d].onLoad....  :brickwall:
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |