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

これが最善の答えかどうかはわかりませんが、時間が無駄になり、機能します。

問題は、画像タグのイニシャルsrcspacer.gif(HTMLで)に設定していたことです。したがって、completeイメージのプロパティはtrue、Initializeルーチンが実行されたときのものでした。

srcただし、プロパティ(javascript内)を画像リストの最初の画像にリセットすると、completeプロパティはになりましfalseた。理由はわかりません。その後、srcプロパティを画像リスト内の別の画像に変更すると、プロパティが設定されました。completetrue

IE9とChromeの両方でこのようになりましたが、Firefoxではそうではありませんでした。図に行きます。srcそのため、画像のをに設定する代わりにspacer.gif、コードビハインド(C#)の画像名のリストを含むjavascriptファイルを読み取り、src画像タグの初期プロパティを最初の画像に設定します。今では動作します。

FWIW、画像タグでonerrorを使用してみましたが、エラーは発生しませんでした。

シーシュ。私はjavascriptが好きではありません。

于 2012-05-31T23:24:24.353 に答える
0

onload またはエラー イベントがあるかどうかを確認してみてください。イメージが存在する場合でも、src をリセットしてもすぐに完成しない「ダーティ」なイメージが作成される可能性があります。

これは以前は気がつきませんでしたが、IE10 (9 はありません) では onload イベントが必要です。onload が起動すると、complete は true になりますが、img src に書き込むとすぐに、再び false になります。src を一度だけ設定して、タイムアウトで完了を確認することもできます。

そして、オンロードハンドラがなければ、画像が表示された後でも、タイマーは永遠に続きます...

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 に答える