2010-11-15 20 views
12

jadę szalony z następującym problemem, który nie zdarza się w każdej innej przeglądarce (Chrome, Firefox):IE8 nie wyświetlania obrazów (czerwony x) ... czasami

  • IE8 pamięć podręczna jest wyczyszczone
  • przeglądarka uruchamia się otwiera stronę HTML/Javascript, która dynamicznie żąda i tworzy kilka obrazów. Ta strona HTML jest obsługiwana z lokalnego serwera lokacji Tomcat: 8084.
  • Większość czasu na 10 obrazów, które są żądane IE wyświetla CZERWONY X.
  • Raport obrazu dewelopera (F12) pokazuje niektóre obrazy "rozmiar pliku" jako poprawne # bajty, ale obraz nadal nie jest wyświetlany, lub niektóre rozmiar pliku obrazów "nieznane bajty" i obraz nie działa.
  • Czasami pojawia się 2-4 na 10 zdjęć, a reszta zawodzi!
  • Czasami w szalonej furii uderzenia odświeżenia 1 miliard razy, pojawiają się obrazy.
  • Prawdziwym kicker jest to, że po umieszczeniu punktu przerwania w moim serwerze HTTP, gniazdo nie jest nawet otwarte. IE nawet nie próbuje pobrać obrazów z serwera przed awarią.
  • I na koniec, jeśli uruchomię ten sam kod, ale zażądam obrazu z mapy google, działa on w IE bez problemów.

Oto mój kod 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> 

dla serwera HTTP używam przykładowy BOOST ASIO HTTP Server Link zmodyfikowałem go tak na każde żądanie URI, wysyła plik PNG (Próbowałam różne pliki, aby upewnić się, że kodowanie PNG nie jest złe). Nagłówek HTTP ma typ Content: "image/png". Więc poprawny typ MIME jest wysyłany.

Próbowałem znaleźć rozwiązanie przez długi czas. Przeczytaj różne posty:

  • Mime type is the problem. Typ Mime nie jest problemem w moim przypadku. Ustawiam typ zawartości. Użyłem także wtyczki Firefox LiveHTTPHeader do wyświetlenia nagłówków wysłanych z serwera. Z wyjątkiem niektórych nagłówków kontroli pamięci podręcznej, moje nagłówki są takie same, jak to, które wysyła Google w zakresie typu zawartości:
  • Security error. Ok może obrazy w domenie krzyżowej stanowią zagrożenie dla bezpieczeństwa. Lub coś blokuje prośbę. Więc dlaczego nie zawodzi w 100% przypadków ?! Dlaczego IE nie prosi o obrazy z różnych domen? Jednak żądanie maps.google.com działa, a moje działa tylko czasami. To samo dotyczy każdej zapory lub antywirusa. Próbowałem także uruchomić serwer na różnych portach (80, 8080, 9980).
  • Javascript error. Myślę, że JavaScript jest poprawny. Tak naprawdę miałem ten sam problem z GWT. Więc myślałem, że to GWT to był problem. I wystąpił błąd zdarzenia z IE i GWT związany z obrazami. Uprościłem kod do samej Javascript. brak GWT.
  • Może to implementacja serwera HTTP C++. To możliwość. Jednak Firefox i chrome działają z tym samym kodem bez problemów.

Wszelkie pomysły? Dzięki.

EDYTOWANIE Dodałem myHostName do zaufanych stron. Obniżyłem także ustawienia zabezpieczeń na niskie dla stron wewnętrznych i internetowych. Zamierzam spróbować wyłączyć keepalive na serwerze, jeśli jest włączona.Jednak jak już wspomniałem, nie widzę, aby IE podejmował próbę pobrania obrazu. Gniazdo nie otrzymuje żadnych żądań z IE, więc usunięcie keep-alive z nagłówków może nie pomóc.

+2

Muszę kochać IE. "Czynienie świata gorszym miejscem">: - O – Bojangles

+0

Czy próbowałeś dodać 'http: // myHostName: 9980 /' do listy zaufanych witryn IE? Ponadto, jeśli twój serwer HTTP obsługuje alfa, czy próbowałeś je wyłączyć? –

Odpowiedz

12

Sprawdź co tryb koloru Twoje zdjęcia są w.

Mam przypadkowo włączony tryb koloru obrazu z RGB8 do CMYK w programie Photoshop, i wpadł na ten sam problem. IE8 nie wyświetli obrazu, a Firefox nie będzie miał żadnych problemów.

+0

Myślałem, że to kodowanie. Wiele osób narzeka na to, że IE nie wspiera dobrze przejrzystości w PNG. Zrobiłem zdjęcie, na którym mapy google generują, które z nich (PNG-8, bez przezroczystości) go zapisały i to właśnie wysyła mój serwer. – Budric

1

Wierzę, że w IE trzeba ustawić źródło po dołączeniu elementu do DOM, w przeciwnym razie nie będzie renderowane poprawnie.

+0

Próbowałem modyfikować kod, aby utworzyć obraz, appendChild(), ustawia img.src. Usunąłem image.width/height z javascript. To samo zachowanie. – Budric

1

To brzmi jak problem z serwerem. Kilka rzeczy do rozwiązania, aby zawęzić problem:

Sprawdź, czy działa statycznie. To sprawia, że ​​płaska strona html zawiera te obrazy. Czy się pojawiają?

Spróbuj zmienić tak, aby timer wykonywał pojedynczą funkcję, która wykonuje pętlę, zamiast wywoływać timer w pętli.

Mają to zrobić document.write (przy obciążeniu strony, bez liczników), po prostu pisząc HTML dla elementów (wraz z adresami URL, dzięki czemu można zobaczyć, co robi)

Mają to zrobić , zamiast z zegarem, w odpowiedzi na kliknięcie przycisku na stronie. Czy to zrobić jeden obraz na raz.

Myślę, że jeśli spróbujesz wszystkich tych rzeczy, najprawdopodobniej dojdziesz do problemu, ale jeśli nie, zgłoś, co się stanie.

+0

Spróbuję. Myślałem, że to problem z serwerem HTTP. Ale wtedy działa dla żądań Firefoksa i Chrome - za każdym razem. Jeśli jest to problem z JavaScriptem i document.append *() lub kolejnością operacji/pętli, to dlaczego ten sam kod działa dla adresu URL maps.google.com ... – Budric

+0

Tak, może to być problem z czasem, który ujawnia błąd na serwerze, który nie występuje we wszystkich przeglądarkach lub w 100% przypadków w przeglądarce problemów. – rob

1

Mam ten sam problem z obrazami nie wyświetlającymi się w IE8, ale w innych przeglądarkach jest OK. Dotyczy to nawet plików zapisanych lokalnie. Jeśli otworzę z IE8 otrzymam czerwony x, ale każdy inny program wyświetla ok. Spojrzałem na właściwości obrazu i pochodzą one z Photoshopa, więc domyślam się, że jest to problem CMYK, jak wspomniano powyżej. Jeśli zapiszę to zdjęcie za pomocą projektu RGB, problem zostanie rozwiązany.

0

Tak, nadal nie wiem, co to jest problem. Ludzie sugerują, że to CMYK. Jeśli to rozwiązanie działa dla ciebie, to świetnie. Używam libPNG do kodowania i RGB przez cały czas. CMYK nie był dla mnie problemem.

Zaimplementowałem serwer HTTP za pomocą próbki Boost/asio http server 3 #. Jak również serwlet Java. Te same problemy. Czasami to działa, czasami nie jest

Poddaję się.

Powiązane problemy