IE8 не отображает изображения (красный х) ... иногда - PullRequest
12 голосов
/ 15 ноября 2010

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

  • Кэш IE8 очищен
  • браузер запускается, открывает страницу HTML / Javascript, которая запрашивает и динамически создает несколько изображений. Эта HTML-страница обслуживается с локального хоста сервера Tomcat: 8084.
  • В большинстве случаев из 10 запрашиваемых изображений IE отображает КРАСНЫЙ X.
  • В отчете об изображении разработчика (F12) для некоторых изображений отображается «размер файла» в виде правильных # байт, однако изображение по-прежнему не отображается, а для некоторых изображений размер файла «неизвестные байты» и изображение не работает.
  • Иногда появляются 2-4 изображения из 10, а остальные терпят неудачу!
  • Иногда в бешеной ярости от удара обновления 1 миллиард раз появляются изображения.
  • Настоящим ударом является то, что когда я ставлю точку останова на моем HTTP-сервере, сокет даже не открывается. IE даже не пытается получить изображения с сервера перед сбоем.
  • И, наконец, если я запускаю тот же код, но запрашиваю изображение откуда-то, например, Google Maps, он работает в 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-сервера Ссылка Я изменил его так, чтобы для любого запроса URI он отправлял файл png (я пробовал различные файлы, чтобы убедиться, что это не кодировка PNG это плохо). Заголовок HTTP имеет тип контента: «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.
  • Может быть, это реализация C ++ HTTP Server. Это возможно. Однако Firefox и Chrome работают с одним и тем же кодом без проблем.

Есть идеи? Спасибо.

EDIT Я добавил myHostName на доверенные сайты. Я также снизил настройки безопасности до низкого для внутренних и интернет-сайтов. Я собираюсь попытаться отключить keepalive на сервере, если он включен. Однако, как я уже упоминал, я не вижу, чтобы IE вообще пытался получить изображение. Сокет не получает никаких запросов от IE, поэтому удаление поддержки заголовков из заголовков может не помочь.

Ответы [ 5 ]

12 голосов
/ 15 ноября 2010

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

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

1 голос
/ 02 февраля 2011

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

1 голос
/ 15 ноября 2010

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

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

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

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

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

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

1 голос
/ 15 ноября 2010

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

0 голосов
/ 01 марта 2011

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

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

Я сдаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...