Время ожидания загрузки изображения в Internet Explorer - PullRequest
8 голосов
/ 20 апреля 2011

У меня есть страница для внутреннего приложения, которая отображает изображения документов, передаваемые из системы хранения документов с помощью веб-службы. Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь выполняет поиск, он может получить сотни просмотров, которые я должен отобразить на одной большой странице, чтобы они могли распечатать их все. Это отлично работает в Firefox, но в IE он перестает загружать изображения через некоторое время, поэтому я получаю около сотни отображаемых изображений, а у остальных просто появляется символ разбитого изображения. Есть ли где-нибудь настройка, по которой я могу изменить это время ожидания?

Ответы [ 5 ]

10 голосов
/ 22 апреля 2011

Если проблема действительно связана с тайм-аутом, вы можете обойти ее, используя сценарий «отложенной загрузки» и добавляя новые изображения в документ только после загрузки существующих изображений.

ЕстьЕсть много способов сделать это, но вот простой пример, который я бросил вместе и проверил.Вместо этого:

<img src="image001.jpg" />
<img src="image002.jpg" />
<img src="image003.jpg" />
<img src="image004.jpg" />
<!-- Etc etc etc -->

Вы можете сделать это:

<div id="imgsGoHere">
</div>

<script type="text/javascript">
    function crossBrowserEventAttach(objectRef, eventName, functionRef)
    {
        try {
            objectRef.addEventListener(eventName, functionRef, false);
        }
        catch(err) {
            try {
                objectRef.attachEvent("on" + eventName, functionRef);
            }
            catch(err2) {
                // event attachment failed
            }
        }
    }


    function addImageToPage()
    {
        var newImageElement = document.createElement("img");
        newImageElement.src = imageArray[nextImageNumber];

        var targetElement = document.getElementById("imgsGoHere");
        targetElement.appendChild(newImageElement);

        nextImageNumber++;

        if (nextImageNumber < imageArray.length) {
            crossBrowserEventAttach(newImageElement, "load", addImageToPage);
            crossBrowserEventAttach(newImageElement, "error", addImageToPage);
        }
    }

    var nextImageNumber = 0;

    var imageArray = new Array();
    imageArray[imageArray.length] = "image001.jpg";
    imageArray[imageArray.length] = "image002.jpg";
    imageArray[imageArray.length] = "image003.jpg";
    // .
    // .
    // .
    // Snip hundreds of rows
    // .
    // .
    // .
    imageArray[imageArray.length] = "image999.jpg";

    addImageToPage();
</script>

Каждое изображение добавляется на страницу только после того, как предыдущее изображение загружается (или не загружается).Если время ожидания вашего браузера истекло, я думаю, это исправит это.

Конечно, проблема может быть не в тайм-ауте, а в том, что у вас не хватает памяти / системных ресурсов, а IE отказывается,Или, как сказал Sra, может быть ограничение IE DOM.

2 голосов
/ 29 апреля 2011

Я предполагаю, что вам нужно обойти настройку IE, самый простой способ сделать это - просто не показывать изображения, которые не загружены, или заменять их изображением по умолчанию:

Ваш HTML:

<img src="http://domain.com/image.jpg" />

Ваш JS:

$('img').load(function(){

    // ... loaded  

}).error(function(){

    // ... not loaded, replace
    $(this).attr('src','/whatever/default.jpg');

    // ... not loaded, hide
    $(this).hide();

});
2 голосов
/ 22 апреля 2011

Нет окончательного решения, но есть некоторые намеки ... Я думаю, что то есть Дом зависает.Я видел это в других случаях.Мне нужно было просто показать изображения и использовать js, который загружает изображение в тот момент, когда они попадают в фокус, но мне нужна работа, если вы нажмете на печать напрямую.Можете ли вы использовать новую возможность CSS хранить изображения непосредственно вместо ссылок.Это должно решить вашу проблему.Я не совсем уверен, но я думаю, что это поддерживается, т. Е. 7

1 голос
/ 29 апреля 2011

Я использовал что-то похожее на картинки HD в качестве фона, используя ASP Pages

Но я использовал jQuery для обработки изображений и их загрузки. Это образец для 1 изображения, но с небольшой настройкой вы можете загружать динамически

myImage = new Image();
        $(myImage).load(function () 
              {
               $(this).hide(); //Stops the loading effect of large images. can be removed
               $('.csBackground li').append(this); //Append image to where you need it
               $(myImage).show();
              }).attr('src', settings.images[0]) //I pass an array from ASP code behind so 0 can be 'i'
                .error( function { checkImages(); } ) //try and relaod the image or something?

Так что вместо изменения тайм-аута просто попробуйте перезагрузить изображения при ошибке.

В противном случае я нашел только решение, которое зависит от клиента (HTTP Timeout)

http://support.microsoft.com/kb/813827

1 голос
/ 29 апреля 2011

Это проблема с Microsoft. К сожалению, это настройка, которую нужно менять на каждом компьютере, так как нет удаленного способа ее изменить. Чтобы изменить его на своем компьютере, попробуйте открыть regedit и добавить RecieveTimeout DWORD со значением (#of минут) * 6000. Надеюсь, это поможет-CodeKid1001

Редактировать: Извините, я забыл указать путь к файлу: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ InternetSettings

...