2010-11-15 14 views
12

che sto impazzendo con il seguente problema che non accade in qualsiasi altro browser (Chrome, Firefox):IE8 non la visualizzazione delle immagini (rosso x) ... a volte

  • cache di IE8 viene cancellata
  • Il browser
  • apre la pagina HTML/Javascript che richiede e crea dinamicamente alcune immagini. Questa pagina HTML è servita da un server locale Tomcat: 8084.
  • La maggior parte delle 10 immagini richieste IE visualizza ROSSO X.
  • Rapporto immagine sviluppatore (F12) mostra alcune immagini "dimensione file" come # byte corretti, tuttavia l'immagine non è ancora visualizzata, o alcune dimensione del file di immagini "byte sconosciuti" e l'immagine non funziona.
  • A volte vengono visualizzate 2-4 immagini su 10 e il resto fallisce!
  • A volte in un furioso furore di colpire aggiornare 1 miliardo di volte, le immagini si presentano.
  • Il vero kicker è che quando inserisco un punto di interruzione nel mio server HTTP, il socket non viene neanche aperto. IE non sta nemmeno tentando di recuperare le immagini dal server prima di fallire.
  • Infine, se eseguo lo stesso codice ma richiede un'immagine da qualche parte come google maps, funziona in IE senza problemi.

Ecco il mio codice 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> 

Per HTTP Server sto usando campione BOOST ASIO HTTP Server Link ho modificato così per qualsiasi richiesta URI, invia un file PNG (ho provato vari file per assicurarsi che non sia codifica PNG che è male). L'intestazione HTTP ha Content-type: "image/png". Quindi viene inviato il tipo mime corretto.

Ho cercato di trovare una soluzione per molto tempo. Leggi vari post:

  • Mime type is the problem. Il tipo Mime non è il problema nel mio caso. Ho impostato il tipo di contenuto. Ho anche utilizzato il plugin Firefox LiveHTTPHeader per visualizzare le intestazioni inviate dal server. Ad eccezione di alcune intestazioni di controllo della cache, le intestazioni sono le stesse di quelle inviate da Google in termini di tipo di contenuto:
  • Security error. Ok, forse le immagini del dominio incrociato rappresentano un rischio per la sicurezza. O qualcosa sta bloccando la richiesta. Bene, allora perché non fallisce il 100% delle volte ?! Perché IE non richiede alcuna immagine cross-domain? Tuttavia, la richiesta di maps.google.com funziona e il mio funziona solo a volte. Lo stesso vale per qualsiasi firewall o antivirus. Ho anche provato a far funzionare il server su varie porte (80, 8080, 9980).
  • Javascript error. Penso che Javascript sia corretto. In realtà stavo ottenendo lo stesso problema con GWT. Quindi pensavo fosse GWT quello era il problema. E c'era un bug di evento con IE e GWT relativi alle immagini. Così ho semplificato il codice solo per Javascript. senza GWT.
  • Forse è l'implementazione del server HTTP C++. È una possibilità. Tuttavia Firefox e Chrome funzionano con lo stesso codice senza problemi.

Qualche idea? Grazie.

EDIT Ho aggiunto myHostName a siti attendibili. Ho anche abbassato le impostazioni di sicurezza a basso per i siti interni e internet. Cercherò di disabilitare keepalive sul server se abilitato.Comunque, come ho detto, non vedo affatto IE che tenta di recuperare l'immagine. Il socket non riceve richieste da IE, quindi rimuovere keep-alive dalle intestazioni potrebbe non essere d'aiuto.

+2

Devo amare IE. "Rendere il mondo un posto più arrabbiato">: - O – Bojangles

+0

Hai provato ad aggiungere 'http: // myHostName: 9980 /' all'elenco dei siti attendibili di IE? Inoltre, se il tuo server HTTP supporta keep-alive, hai provato a disabilitarli? –

risposta

12

Verifica a quanto modalità colore le immagini sono in.

ho acceso accidentalmente la modalità di colore di un'immagine da RGB8 in CMYK in Photoshop, e corse nello stesso problema. IE8 non sarebbe riuscito a visualizzare l'immagine, mentre Firefox non avrebbe avuto alcun problema.

+0

Ho pensato che fosse la codifica. Un sacco di persone si lamentano di IE che non supporta la trasparenza in PNG. Ho scattato l'immagine che google maps genera che funziona (PNG-8, nessuna trasparenza) salvandola ed è ciò che il mio server sta inviando. – Budric

1

Credo che in IE sia necessario impostare l'origine dopo che l'elemento è stato aggiunto al DOM, altrimenti non verrà visualizzato correttamente.

+0

Ho provato a modificare il codice per creare un'immagine, appendChild(), imposta img.src. Ho rimosso image.width/height da javascript. Stesso comportamento. – Budric

1

Sembra un problema con il server. Alcune cose da provare, per restringere il problema:

Vedere se funziona staticamente. Questo è fare una pagina HTML piatta che include queste immagini. Si presentano?

Provare a modificarlo in modo che il timer esegua una singola funzione che fa un ciclo, piuttosto che chiamare il timer in un ciclo.

Averlo fare un document.write (al caricamento della pagina, senza timer), semplicemente scrivendo il codice HTML per gli elementi (insieme con gli URL in modo da poter vedere che cosa sta facendo)

averlo farlo , piuttosto che con un timer, in risposta a fare clic su un pulsante sulla pagina. Faccio una sola immagine alla volta.

Penso che se provate tutte queste cose, probabilmente arriverete al problema, ma in caso contrario, riferite cosa succede.

+0

Ci proverò. Ho pensato che fosse un problema con il server HTTP. Ma poi funziona per le richieste di Firefox e Chrome - ogni volta. Se si tratta di un problema con JavaScript e document.append *() o l'ordine delle operazioni/cicli, allora perché lo stesso codice funziona per l'URL maps.google.com ... – Budric

+0

Sì, beh, potrebbe essere un problema di temporizzazione che sta rivelando un bug nel server, che non accade su tutti i browser o il 100% delle volte sul browser problematico. – rob

1

Ho lo stesso problema con le immagini non visualizzate in IE8 ma ok in altri browser. Questo vale anche per i file salvati localmente. Se apro con IE8 ottengo x rosso, ma ogni altro programma visualizza ok. Ho guardato le proprietà dell'immagine e hanno avuto origine da Photoshop, quindi suppongo che sia il problema CMYK come sopra indicato. Se salvi questa immagine utilizzando il progetto RGB, il problema è risolto.

0

Sì, non so ancora quale sia il problema. Le persone hanno suggerito che fosse CMYK. Se quella soluzione funziona per te, è grandioso. Sto usando libPNG per la codifica e RGB in ogni momento. CMYK non era il problema per me.

Ho implementato il server HTTP utilizzando il campione n. 3 del server http di Boost/asio. Così come Java Servlet. Gli stessi problemi A volte funziona, a volte non lo fa

Mi arrendo.

Problemi correlati