我有一个已经工作了很长时间的幻灯片。我正在将网站更新为XHTML过渡,现在幻灯片放映在IE 9中无效。
似乎问题是“完整”功能不起作用。以下代码启动幻灯片放映(在页面加载后调用):
function Initialize() {
document.images["carImg"].src = imgList[0];
if (document.getElementById) {
theLink = document.getElementById("linkTo");
theLink.href = imgURL[0];
}
if (document.images["carImg"].complete) SetTheInterval();
else setTimeout("Initialize()", 1000);
}
document.images["carImg"].complete
总是解析为false,因此它每秒调用Initialize。图片imgList[0]
已加载,因为它正在显示。但是没有设置完整的属性。
如果我注释掉if (document.images["carImg"].complete)
条件,只需拨打SetTheInterval()
,幻灯片就可以了。
它也适用于Firefox(带条件)。如果我将IE 9设置为“兼容性视图”(尽管其他事情看起来很奇怪),它也可以工作。
有谁知道为什么IE 9中没有设置“完整”属性?有什么变化吗?
更新:似乎完成仅不能处理第一张图片。对于后续图像,在加载图像时设置完成。
答案 0 :(得分:0)
尝试查看是否存在onload或error事件,即使图像存在,即使重置src也可能会使“脏”图像无法立即完成。
之前我没有注意到这一点,但在IE10(没有9)中你需要onload事件。 当onload触发时,complete为true,但是一旦你写入img src它就会再次出错。您也可以只设置一次src,并在超时时检查完成。
如果没有onload处理程序,即使图像出现后,计时器也会继续...
window.ready=function(){
var img= document.images[0];
img.onload= function(){
clearTimeout(ready.timer);
alert('onload called, img.complete= '+img.complete);
};
// temporary error handler, if needed
img.onerror=function(e){
clearTimeout(ready.timer);
alert('Error!\n'+e.message || e);
};
// set the new src
img.src= Memry.Rte+'art/sundrag.gif';
if(!img.complete) ready.timer=setTimeout(window.ready, 300);
else alert('complete');
}
ready()
答案 1 :(得分:0)
我不确定这是最好的答案,但时间浪费而且有效。
问题是,我已将图片代码的初始src
设置为spacer.gif
(以HTML格式)。因此,执行Initialize例程时,图像的complete
属性为true
。
但是,当我将src
属性(在javascript中)重置为图像列表中的第一个图像时,complete
属性变为false
。我不知道为什么。在此之后,将src
属性更改为图片列表 中的另一个图片 将complete
属性设置为true
。< / p>
这种方式在IE9和Chrome中都有,但在Firefox中却没有。去搞清楚。因此,我没有将图像的src
设置为spacer.gif
,而是在代码隐藏(C#)中读取包含图像名称列表的javascript文件,并设置初始src
属性图像标记到第一个图像。现在它有效。
FWIW,我确实尝试在图片标签中使用onerror,但没有出现错误。
啧。我不喜欢javascript。