2

我有一個幻燈片放映已經工作了很長時間。我將網站更新爲XHTML過渡版,現在幻燈片放映在IE 9中不起作用。Javascript:document.images []。完全不能在IE中工作

看起來問題在於「完成」功能不起作用。以下代碼獲取開始放幻燈片(這是在頁面加載後調用):

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,所以它調用初始化每一秒。圖片imgList[0]加載的是,因爲它正在顯示。但是完整的財產沒有被設置。

如果我註釋掉if (document.images["carImg"].complete)有條件的,並且只需撥打SetTheInterval(),幻燈片播放就可以工作。

它也適用於Firefox(帶條件)。如果我將IE 9設置爲「兼容性視圖」(但其他方面看起來很奇怪),它也可以工作。

有誰知道爲什麼「完整」屬性沒有在IE 9中設置?有什麼改變?

更新:它似乎完整是只有不工作的第一個圖像。對於後續圖像,加載圖像時設置完成。

+1

您是否嘗試過使用回調?我不認爲,你的方法是正確的。 'document.images [「carImg」]。oncomplete = SetTheInterval;' – Gandaro

+0

好吧,它已經工作了好幾年了,它在Firefox中工作。在document.images []上的Google搜索完成了許多結果。此外,我並不總是希望在加載圖像時調用SetTheInterval - 僅此一次。 – Cynthia

回答

0

我不知道這是最好的答案,但時間是浪費,它作品。

問題是,我已經將圖像標記的初始src設置爲spacer.gif(以HTML格式)。因此執行Initialize例程時,映像的complete屬性爲true

但是,當我將src屬性(在javascript中)重置爲圖像列表中的第一個圖像時,complete屬性變成了false。我不知道爲什麼。接下來,將src屬性更改爲圖像列表中的另一圖像確實complete屬性設置爲true

在IE9和Chrome中都是這樣,但在Firefox中不這樣。去搞清楚。因此,我沒有將圖像的src設置爲spacer.gif,而是在代碼隱藏(C#)中讀取包含圖像名稱列表的javascript文件,並將圖像標記的初始src屬性設置爲第一個圖像。現在它可以工作。

FWIW,我沒有嘗試在圖像標籤中使用onerror,但沒有出現錯誤。

Sheesh。我不喜歡javascript。

0

嘗試查看是否存在onload或錯誤事件,即使圖像存在,即使重置src也會導致即時完成的「髒」圖像。

我以前沒有注意到這一點,但在IE10(沒有9)你需要onload事件。 當onload激發時,complete是真實的,但是一旦你寫入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()