5

IEにはreadyState、ドキュメントオブジェクトに属性があります。これは、「読み込み中」、「完了」などの現在の状態を示します。

Mozillaベースのブラウザでドキュメントの現在の読み込み状態を見つける方法はありますか?私はDOMContentLoadedイベントを認識していますが、このイベントが発生した後にコードを実行できるため、状況に適合しません。

追加:いいえ、フレームワークを使用できず.readyState、XHRオブジェクトの属性と混同しないでください。また、ブックマークレットなので、どの読み込み段階でも挿入できます。

後で追加:とにかく、それは私にとって大きな問題ではないようです。この属性はFF3.6で追加されるため、未完成のDOMを操作する場合(IEとは異なり)、Firefoxで問題が発生することはありません。

4

2 に答える 2

3

いいえ、できません。ごめん。しかし、これがあなたにできることです。演技する前にそこにいたいものをテストできない場合:

window.setTimeout(function () {
    // do your stuff here
}, 0);

(これは、ページがレンダリングされた後に確実に実行されますが、DOMContentLoadedの後ではなく、onloadの後になる可能性があります。)

探しているものをテストする方法を知っている場合:

(function () {
    if (/* test if what you're looking for is there */) {
        // do your stuff
    } else {
        window.setTimeout(arguments.callee, 0);
    }
})();

これにより、探しているものがない場合を除いて、すぐに実行されます。存在しない場合は、onloadイベントが終了するまで待機します。

編集:

このソリューションを確認してください。

エッジケースでは、document.getElementsByTagName( "*")の最後の要素が未定義かどうかをチェックします。そして、それはOperaでも彼にとってはうまくいくようです。

于 2009-10-06T20:57:35.970 に答える
2

実行できますか?DOMイベントの通知を受け取り、その状態を保存するだけです。あなたの根本的な問題が何であるかわかりません。確かに、この方法の根性を取り除いて、状況に適応させることができます。

jQueryのそれを行う方法:

// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
    // Use the handy event callback
    document.addEventListener( "DOMContentLoaded", function(){
              //do stuff
    }, false );

// If IE event model is used
} else if ( document.attachEvent ) {
    // ensure firing before onload,
    // maybe late but safe also for iframes
    document.attachEvent("onreadystatechange", function(){
        if ( document.readyState === "complete" ) {
            document.detachEvent( "onreadystatechange", arguments.callee );
            jQuery.ready();
        }
    });

    // If IE and not an iframe
    // continually check to see if the document is ready
    if ( document.documentElement.doScroll && window == window.top ) (function(){
        if ( jQuery.isReady ) return;

        try {
            // If IE is used, use the trick by Diego Perini
            // http://javascript.nwbox.com/IEContentLoaded/
            document.documentElement.doScroll("left");
        } catch( error ) {
            setTimeout( arguments.callee, 0 );
            return;
        }

        // and execute any waiting functions
        jQuery.ready();
    })();
}

// A fallback to window.onload, that will always work
jQuery.event.add( window, "load", jQuery.ready );
于 2009-10-06T16:21:54.467 に答える