【问题标题】:Image load timeout in Internet ExplorerInternet Explorer 中的图像加载超时
【发布时间】:2011-08-09 12:28:41
【问题描述】:

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

【问题讨论】:

  • @Niklas - 如果不接受任何答案,是否不会自动奖励赏金?
  • 嗯,我其实不知道?如果能这样工作就好了。
  • @Niklas - 来自meta.stackexchange.com/questions/16065/… :“在赏金期结束时,如果赏金发起人没有手动授予赏金,符合条件的答案将自动获得一半的赏金。”跨度>
  • 谢谢!不过我还是希望凯文能学会接受更多的问题……
  • @Kevin - 不。但是如果您能够找到答案,就像您在这个问题 (stackoverflow.com/questions/1868044/…) 中所做的那样,您可以发布您的解决方案作为问题的答案,然后接受你自己的答案。这实际上是受鼓励的,并且比像您所做的那样编辑问题并将解决方案放在那里更可取。

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


【解决方案1】:

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

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

<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
  • 我认为这不是内存/资源问题,因为它在 Firefox 中运行良好。我会给你延迟加载建议。
  • IE 6-8 使用内存和资源的效率不如 Firefox 或其他现代浏览器。您在 IE 中经常会遇到其他地方不会出现的瓶颈。
  • @Joshua,首先,感谢您的建议。在尝试实现这一点时,我至少发现了部分问题。出于某种原因,IE 正在转向兼容模式中间页面加载。我们的安全检查将其检测为与登录时不同的浏览器并终止会话。然而,纠正这个问题仍然没有完全解决问题。 IT 加载了 50% 以上的图像,但在加载所有图像之前它仍然处于死亡状态。
  • @Kevin - 嗯...我不确定还有什么建议。确定不是资源问题?正如 Peteorpeter 所提到的,IE 的效率通常低于其他浏览器,并且可能会更早地达到其极限。您可以使用更简单的图像(可能是 2 色 GIF,而不是全色 JPEG)或图像的缩小副本(为测试目的创建 50% 大小的缩小副本)进行测试,看看它是否加载了更多图像?如果是这样,您可能会遇到资源限制,并且可能没有解决方法。
【解决方案2】:

没有最终解决方案,但有一些提示...... 我认为ie Dom挂断了。我在其他情况下见过这种情况。我只需要显示图像并使用 js 在图像聚焦时加载图像,但我认为如果你直接点击 print 则需要工作。您可以使用新的 css 功能直接存储图像数据而不是链接。那应该可以解决您的问题。我不太确定,但我认为从 ie 7 开始就支持它

【讨论】:

  • 我不是最擅长 css 的,但我会看看你的建议。不幸的是,由于各种原因,我认为我无法存储图像。
【解决方案3】:

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

});

【讨论】:

    【解决方案4】:

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

    编辑:抱歉,我忘了输入文件路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 2021-04-13
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多