2

ドキュメントレディ関数内でajax(非同期)を使用してロードしているコンテンツを含む親Webページ(Java JSPである可能性があります)をロードする状況があります。ページが表示された後、非同期作業を実行します。

これはFirefoxで期待どおりに機能します。ページはすばやくレンダリングされ、jqueryコードは他の要素をロードするajax呼び出しを実行します。

IE8では、すべてが完了するまで待機してから、完成した結果をレンダリングします。それは私の文書準備の試みを尊重しません。ドキュメントの準備ができたセクションでコードを実行しているときにページを読み込んでいるところにあり、最後にすべての完成した結果がブラウザに表示されます。

回避策はありますか?この点でIE8をFirefoxのように動作させる方法はありますか...ページをできるだけ早くレンダリングし、レンダリング後にいくつかのjqueryコード/ ajax呼び出しを実行しますか?

4

2 に答える 2

2

これはIE67および8に影響するバグです。jQueryのドキュメントレディハンドラーは、IE67および8のウィンドウ読み込みイベントの直前または直後まで起動しません。これはIE9では発生しません。

これを修正する1つの方法は、イベントを自分で処理することです。

<body class="jquerydomready">
    <!--[if lt IE 9]>
    <script>
        $('body').removeClass('jquerydomready');
    </script>
    <![endif]-->

次に、スクリプトでこれを使用します。

function init() {
    // code here will be ran when document is ready
    $("body").css("background-color","green");
}

if ( $("body").is(".jquerydomready") ) {
    $(init); // not oldIE
}
else {
    // oldIE way
    document.onreadystatechange = function() {
        if (document.readyState == "interactive") init();    
    }​
}

ただし、ajaxリクエストを実行していて、それらがすぐに発生することを期待している場合、またはコードが機能しない場合は、ネットワークに常に依存できるわけではないため、迅速に実行する必要のないシステムに移行することをお勧めします。速い。

チケット: http: //bugs.jquery.com/ticket/12282

現在、実際にはバグとしてマークされていませんが、この問題の履歴をたどると、jQueryの開発中に何度か修正および修正解除されています。

編集:私はこの答えのIE6の部分について完全に確信していません、私はこれでIE6をテストしていません。

これは、IE7および8で不適切に待機していることを示すサポートJSFiddleです(これもIE6ではテストされていません)。

上記の修正前:http://jsfiddle.net/PFWmS/

上記の修正後:http://jsfiddle.net/PFWmS/7

于 2012-11-01T21:34:39.407 に答える
0

セクションをページの最後に移動しようとしましたか?

于 2012-11-01T21:26:55.137 に答える