2010-11-15 13 views
12

me estoy volviendo loco con el siguiente problema lo que no ocurre en ningún otro navegador (Chrome, Firefox):IE8 no se visualizan imágenes (rojo x) ... a veces

  • caché de Internet Explorer 8 se borra
  • El navegador comienza abre la página HTML/Javascript que solicita y crea algunas imágenes dinámicamente. Esta página HTML se sirve desde un servidor local Tomcat: 8084.
  • La mayor parte del tiempo de 10 imágenes solicitadas IE muestra RED X.
  • El informe de imagen del desarrollador (F12) muestra algunas imágenes "tamaño de archivo" como # bytes correctos, pero la imagen aún no se muestra, o algunas tamaño de archivo de imágenes "bytes desconocidos" y la imagen no funciona.
  • A veces aparecen de 2 a 4 de 10 imágenes y el resto falla.
  • A veces, en una loca furia de golpear refresca mil millones de veces, aparecen las imágenes.
  • El verdadero truco es que cuando pongo un punto de interrupción en mi servidor HTTP, el socket ni siquiera se abre. IE ni siquiera intenta recuperar las imágenes del servidor antes de fallar.
  • Y, por último, si ejecuto el mismo código pero solicito una imagen de algún lugar como google maps, funciona en IE sin problemas.

Aquí está mi código javascript:

<script type="text/javascript"> 
    var ctr = 0; 
    function getImage(url) 
    { 
     var img = document.createElement("img"); 
     img.src = url + "&nc=" + ctr; 
     ctr ++; 
     img.width = 128; 
     img.height = 128; 
     document.body.appendChild(img); 
    } 

    for (var i = 0; i < 10; i=i+1) 
    { 
     //THIS FAILS MOST OF THE TIME 
     setTimeout("getImage('http://myHostName:9980/GenerateImageStatic?parameter=1')", 1000); 
     //THIS WORKS! WHY? 
     //setTimeout("getImage('http://maps.google.com:80/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap&markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false')", 1000); 
    } 
</script> 

Para servidor HTTP que estoy usando ASIO muestra BOOST servidor HTTP Link lo modifico por lo que para cualquier URI de la solicitud, envía un archivo PNG (He intentado varios archivos para asegurarse de que no sea una codificación PNG mala). El encabezado HTTP tiene Content-type: "image/png". Entonces se envía el tipo de mimo correcto.

He estado tratando de encontrar una solución durante mucho tiempo. Lea varias publicaciones:

  • Mime type is the problem. El tipo MIME no es el problema en mi caso. Configuro el tipo de contenido. También he usado el complemento Firefox LiveHTTPHeader para ver los encabezados enviados desde el servidor. A excepción de algunos encabezados de control de caché, mis encabezados son los mismos que los que envía google en términos de tipo de contenido:
  • Security error. Ok, tal vez las imágenes de dominio cruzado son un riesgo de seguridad. O algo está bloqueando la solicitud. Entonces, ¿por qué no falla el 100% del tiempo? ¿Por qué IE no solicita ninguna imagen de dominio cruzado? Sin embargo, la solicitud de maps.google.com funciona, y la mía solo funciona a veces. Lo mismo se aplica a cualquier firewall o antivirus. También intenté ejecutar el servidor en varios puertos (80, 8080, 9980).
  • Javascript error. Creo que el Javascript es correcto De hecho, estaba teniendo el mismo problema con GWT. Entonces pensé que era GWT el problema. Y hubo un error de evento con IE y GWT relacionado con las imágenes. Así que simplifiqué el código solo a Javascript. no GWT.
  • Tal vez sea la implementación del servidor HTTP de C++. Es una posibilidad. Sin embargo, Firefox y Chrome funcionan con el mismo código sin problemas.

¿Alguna idea? Gracias.

EDIT He añadido myHostName a sitios de confianza. También bajé la configuración de seguridad a bajo para sitios internos y de Internet. Voy a intentar desactivar keepalive en el servidor si está habilitado.Sin embargo, como mencioné, no veo IE haciendo un intento de recuperar la imagen. El socket no recibe ninguna solicitud de IE, por lo que quitar keep-alive de los encabezados puede no ser de ayuda.

+2

Tengo que amar al IE. "Hacer que el mundo sea un lugar más enojoso">: - O – Bojangles

+0

¿Intentó agregar 'http: // myHostName: 9980 /' a la lista de sitios de confianza de IE? Además, si su servidor HTTP admite keep-alives, ¿intentó deshabilitarlos? –

Respuesta

12

comprobar qué modo de color de sus imágenes están en.

me han cambiado accidentalmente el modo de color de una imagen de RGB8 a CMYK en Photoshop, y se encontró con el mismo problema. IE8 no podría mostrar la imagen, mientras que Firefox no tendría ningún problema.

+0

Pensé que era la codificación. Mucha gente se queja de que IE no respalda la transparencia en PNG. Tomé la imagen que genera Google Maps, que funciona (PNG-8, sin transparencia), la guardé y eso es lo que está enviando mi servidor. – Budric

1

Creo que en IE necesita configurar el origen después de que el elemento se anexa al DOM, de lo contrario no se procesará correctamente.

+0

Intenté modificar el código para que cree la imagen, appendChild(), establece img.src. Eliminé image.width/height de javascript. Mismo comportamiento. – Budric

1

Parece un problema con su servidor. Algunas cosas para intentar, para reducir el problema:

Ver si funciona estáticamente. Eso es hacer una página html plana que incluye estas imágenes. ¿Aparecen?

Intente cambiarlo para que el temporizador ejecute una sola función que realice un ciclo, en lugar de llamar al temporizador en un bucle.

hacer que haga un document.write (en carga de la página, sin ningún tipo de temporizadores), sólo tiene que escribir el código HTML para los elementos (junto con las direcciones URL para que pueda ver lo que está haciendo)

ya lo tienen que hacer , en lugar de con un temporizador, en respuesta a hacer clic en un botón en la página. Hazlo una imagen a la vez.

Creo que si prueba todas estas cosas, es probable que llegue al problema, pero si no, informe lo que sucede.

+0

Lo intentaré. Pensé que era un problema con el servidor HTTP. Pero luego funciona para las solicitudes de Firefox y Chrome, siempre. Si se trata de un problema con JavaScript y document.append *() u orden de operaciones/bucles, ¿por qué funciona el mismo código para maps.google.com URL ... – Budric

+0

Sí, bien podría ser un problema de tiempo que está revelando una error en el servidor, eso no ocurre en todos los navegadores o el 100% del tiempo en el navegador problemático. – rob

1

Tengo el mismo problema con las imágenes que no se muestran en IE8, pero está bien en otros navegadores. Este es incluso el caso de los archivos guardados localmente. Si abro con IE8, obtengo x rojo, pero cualquier otro programa se muestra bien. Miré las propiedades de la imagen y se originaron en Photoshop, así que supongo que es el problema CMYK como se indicó anteriormente. Si guardo esta imagen usando un proyecto RGB, el problema se resuelve.

0

Sí, todavía no sé cuál es el problema. La gente ha sugerido que es CMYK. Si esa solución funciona para usted, eso es genial. Estoy usando libPNG para codificar y RGB en todo momento. CMYK no fue el problema para mí.

Implementé el servidor HTTP usando la muestra # 3 del servidor http Boost/asio. Además de Java Servlet. Mismos problemas A veces funciona, a veces no

Me rindo.

Cuestiones relacionadas