Подтвердить что ты не робот

IE8 не отображает изображения (красный x)... иногда

Я схожу с ума со следующей проблемой, которая не возникает ни в одном другом браузере (Chrome, Firefox):

  • Кэш IE8 очищен
  • браузер начинает открывать страницу HTML/Javascript, которая запрашивает и создает несколько изображений динамически. Эта страница HTML предоставляется с сервера Tomcat localhost: 8084.
  • В большинстве случаев из 10 изображений, которые запрашиваются, IE отображает RED X.
  • Отчет об образовании разработчика (F12) показывает некоторые "размер файла" изображений как правильные # байты, но изображение все еще не отображается, а некоторые файлы изображений "неизвестные байты" и изображение не работают.
  • Иногда появляется 2-4 из 10 изображений, а остальные терпят неудачу!
  • Иногда в безумной ярости удара 1 миллиард раз появляются изображения.
  • Настоящим кикером является то, что когда я помещаю точку останова в свой HTTP-сервер, сокет даже не открывается. IE даже не пытается получить изображения с сервера перед сбоем.
  • И, наконец, если я запустил один и тот же код, но запросил изображение откуда-то вроде карт google, он работает в IE без проблем.

Вот мой код 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.012318&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false')", 1000);
    }
</script>

Для HTTP-сервера я использую BOOST-образец ASIO HTTP Server Ссылка Я изменил его так для любого запроса URI, он отправляет png файл (Я пробовал различные файлы, чтобы убедиться, что это не кодировка PNG). Заголовок HTTP имеет Content-type: "image/png". Правильный тип mime отправляется.

Я пытался найти решение в течение длительного времени. Прочитайте различные сообщения:

  • Миг-тип - проблема. Тип Mime не является проблемой в моем случае. Я установил Content-type. Я также использовал Firefox LiveHTTPHeader плагин для просмотра заголовков, отправленных с сервера. За исключением некоторых заголовков управления кешем, мои заголовки такие же, как то, что отправляет Google в терминах Content-type:
  • Ошибка безопасности. Возможно, изображения с перекрестными доменами представляют собой угрозу безопасности. Или что-то блокирует запрос. Ну, тогда почему он не терпит неудачу в 100% случаев?! Почему IE не запрашивает изображения с перекрестными доменами? Однако запрос maps.google.com работает, а мой работает только иногда. То же самое касается любого брандмауэра или антивируса. Я также попытался запустить сервер на разных портах (80, 8080, 9980).
  • Ошибка Javascript. Я думаю, что Javascript верен. У меня действительно была проблема с GWT. Поэтому я подумал, что это проблема GWT. И произошла ошибка события с IE и GWT, связанная с изображениями. Поэтому я упростил код только Javascript. нет GWT.
  • Возможно, это реализация С++ HTTP Server. Это возможность. Однако Firefox и Chrome работают с одним и тем же кодом без проблем.

Любые идеи? Спасибо.

ИЗМЕНИТЬ Я добавил myHostName на доверенные сайты. Я также понизил настройки безопасности до минимума для внутренних и интернет-сайтов. Я попытаюсь отключить keepalive на сервере, если он включен. Однако, как я уже говорил, я не вижу, что IE пытается получить изображение вообще. Сокет не получает никаких запросов от IE, поэтому удаление keep-alive из заголовков может не помочь.

4b9b3361

Ответ 1

Проверьте, в каком цветовом режиме находятся ваши изображения.

Я случайно переключил цветной режим изображения с RGB8 на CMYK в Photoshop и столкнулся с той же проблемой. IE8 не смог отобразить изображение, в то время как Firefox вообще не имел бы проблем.

Ответ 2

Я считаю, что в IE вам нужно установить источник после добавления элемента в DOM, иначе он будет неправильно отображаться.

Ответ 3

Это звучит как проблема с вашим сервером. Несколько вещей, чтобы попытаться, сузить проблему:

Посмотрите, работает ли оно статически. Это делает плоскую страницу html, которая включает эти изображения. Они появляются?

Попробуйте изменить его так, чтобы ваш таймер выполнял одну функцию, которая выполняет цикл, вместо того, чтобы вызывать таймер в цикле.

У него есть document.write(при загрузке страницы без каких-либо таймеров), просто записывая html для элементов (вместе с URL-адресами, чтобы вы могли видеть, что он делает)

Попросите его сделать это, а не с помощью таймера, в ответ на нажатие кнопки на странице. Сделайте одно изображение за раз.

Я думаю, что если вы попробуете все это, вы, скорее всего, придете к проблеме, но если нет, сообщите, что произойдет.

Ответ 4

У меня такая же проблема с изображениями, которые не отображаются в IE8, но в других браузерах. Это даже в случае с локально сохраненными файлами. Если я открываю IE8, я получаю красный x, но каждая другая программа отображается нормально. Я посмотрел на свойства изображения, и они возникли из Photoshop, поэтому я предполагаю, что это проблема CMYK, как указано выше. Если я сохраню это изображение с помощью проекта RGB, проблема будет решена.

Ответ 5

Да, я до сих пор не знаю, в чем проблема. Люди предлагали это CMYK. Если это решение работает для вас, это здорово. Я использую libPNG для кодирования и RGB в любое время. CMYK не проблема для меня.

Я реализовал HTTP-сервер с использованием примера HTTP-сервера Boost/asio # 3. Также как Java Servlet. Те же проблемы. Иногда это работает, иногда это не

Я сдаюсь.