2

我有一个幻灯片放映已经工作了很长时间。我正在将站点更新为 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 中设置“完整”属性?有什么改变吗?

更新:似乎完整的只是不适用于第一张图片。对于后续图像,在加载图像时设置完成。

4

2 回答 2

0

尝试查看是否存在 onload 或错误事件,即使重置 src 也可能会生成一个无法立即完成的“脏”图像,即使图像存在也是如此。

我以前没有注意到这一点,但是在 IE10(没有 9)中,您需要 onload 事件。当 onload 触发时,complete 为 true,但一旦您写入 img src,它又为 false。您也可以只设置一次 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()
于 2012-05-30T20:59:08.570 回答
0

我不确定这是最好的答案,但时间是浪费的,而且有效。

src问题是,我已将图像标记的初始值设置为spacer.gif(在 HTML 中)。因此,complete图像的属性true是执行 Initialize 例程的时间。

但是,当我将src属性(在 javascript 中)重置为图像列表中的第一个图像时,complete属性变为false. 我不确定为什么。随后,将src属性更改为图像列表中的另一个图像确实complete属性设置为true.

在 IE9 和 Chrome 中都是这种方式,但在 Firefox 中则不然。去搞清楚。因此,我src没有将图像的 设置为 ,而是spacer.gif在代码隐藏 (C#) 中读取包含图像名称列表的 javascript 文件,src并将图像标记的初始属性设置为第一个图像。现在它起作用了。

FWIW,我确实尝试在图像标签中使用 onerror ,但没有出现错误。

嘘。我不喜欢javascript。

于 2012-05-31T23:24:24.353 回答