Internet Explorer中的图像加载超时

时间:2011-04-20 13:27:26

标签: asp.net html internet-explorer browser timeout

我有一个内部应用程序页面,显示使用Web服务从文档存储系统流式传输的文档图像。我遇到的问题是,当用户进行搜索时,他们可能会获得数百次点击,我必须在一个大页面上显示,这样他们就可以打印出来。这在Firefox中运行良好,但在IE中它会在一段时间后停止加载图像,所以我得到一百左右的显示,其余的只有破碎的图像符号。是否有某个设置我可以更改此超时?

5 个答案:

答案 0 :(得分:10)

如果问题确实是超时,您可以通过使用“延迟加载”脚本并仅在加载现有图像后将新图像添加到文档中来解决此问题。

有很多方法可以做到这一点,但这是一个简单的例子,我把它组合在一起并进行了测试。而不是:

<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限制。

答案 1 :(得分:2)

没有最终解决方案,但有一些提示...... 我认为即Dom挂断了。我在其他情况下见过这个。我只需要显示图像并使用一个js来加载图像,当它们聚焦时,但是如果你直接打印我想要工作。你能否使用新的css功能直接存储imagedata而不是链接。那应该可以解决你的问题。我不太确定,但我认为它得到支持,因为即7

答案 2 :(得分:2)

我的猜测是你必须解决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();

});

答案 3 :(得分:1)

这是微软的一个问题。不幸的是,这是一个必须在每台计算机上更改的设置,因为没有远程方法可以更改它。要在您的计算机上更改它,请尝试打开regedit并添加 RecieveTimeout DWORD,其值为(#of minutes)* 6000。希望这有帮助 - CodeKid1001

编辑:很抱歉,我忘了放入文件路径: HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网设定

答案 4 :(得分:1)

我使用ASP页面

使用类似于高清图片作为背景的东西

但我使用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超时)

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