我有一个内部应用程序页面,使用Web服务从文档存储系统中流式传输文档图像。我的问题是,当用户进行搜索时,他们可能会得到数百个结果,在一个大页面上显示所有结果以便打印。在Firefox中这样做没有问题,但在IE中,加载图像一段时间后就停止了,只能显示一百多个,其余的只有损坏的图像符号。有没有设置可以更改此超时时间?
我有一个内部应用程序页面,使用Web服务从文档存储系统中流式传输文档图像。我的问题是,当用户进行搜索时,他们可能会得到数百个结果,在一个大页面上显示所有结果以便打印。在Firefox中这样做没有问题,但在IE中,加载图像一段时间后就停止了,只能显示一百多个,其余的只有损坏的图像符号。有没有设置可以更改此超时时间?
如果问题确实是超时引起的,您可以通过使用“懒加载”脚本并仅在现有图像加载完毕后将新图像添加到文档中来解决它。
有很多方法可以做到这一点,但这里是我准备并测试过的一个简单示例。不要使用以下内容:
<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放弃了。或者可能存在IE DOM限制,就像Sra所说的那样。
我猜测你需要绕过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();
});
没有最终的解决方案,但有一些提示... 我认为ie Dom卡住了。我在其他情况下也见过这种情况。我只需要显示图片,并使用js加载图像,当它们进入焦点时,但如果直接打印,这可能不起作用。您可以使用新的css功能直接存储imagedata而不是链接。这应该解决您的问题。我不太确定,但我认为自ie 7以来就支持它。
我曾经使用过类似的方法,使用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超时)
这是一个与Microsoft相关的问题。不幸的是,这是一个需要在每台电脑上更改设置的问题,因为没有远程方式可以修改它。要在您的计算机上更改它,请尝试打开regedit并添加RecieveTimeout DWORD,并将值设置为(#分钟)* 6000。 希望这能帮到您-CodeKid1001
编辑:抱歉,我忘了放文件路径: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ InternetSettings