2012-04-26 8 views
1

私は非常に独特の状況があります。DOMの前でYUIのonDomReadyが一見準備ができていますか?

かなり複雑で(遅い)フレームワークで書かれたWebアプリケーションの問題をデバッグしています。

コードの一部として、YUIに次のスクリプトロードし、実行:init()は、JS関数で

function() { 
    YU.Event.onDOMReady(function() { init(); }); 
} 

を。

問題::時には(約1/2時間)、init()関数が呼び出されたときに、DOMがまだ読み込まれていないようです。より正確には、document.getElementById();呼び出しはnull値、およびときに私は、Internet Explorerのデバッガ(IE8)をアップロードし、getElementById()コール、デバッガのHTMLタブ単に"Loading..."

は言う(アプリは互換性がありませんん行にブレークポイントを返しますFirebugを使用することはできません)

私はに何か考えていただきたいと思いますが、これはなぜ起こっているのでしょうか?(わずか50%の時間)、これを調べる方法を教えてください。

このことができます誰かがのappendChild(経由で動的にDOMに物事のカップルを追加関与アプリに変更を加えたときに、問題が開始された場合)

私は特にどのように探していますのでご注意ください私は私が使用している場合ことを発見し、早期onDOMReady()コール、NOTあなたがDOM appendChild()を使用している場合、代わりにYUIのバージョンを使用し、非ヌルまでのsetTimeoutとループでgetElementById()

+0

getElementByIDでアクセスしようとしている要素は、ページやajaxを使って静的にロードされていますか? – Matt

+0

@Matt - 静的です。 HTMLの一部。 – DVK

+1

'document.getElementById()'は決して 'undefined'(例えばhttp://jsfiddle.net/AxrDL/)を返すべきではありません。あなたが 'null'を返すことを意味するならば、そう言います。この動作を再現することはほとんど不可能なので、追加情報が役立ちます:IEのどのバージョン?あなたは他のバージョンを試しましたか? DOMReadyイベントをウィンドウロードイベントに変更するとどうなりますか?長さ0のタイマーでDOMReadyを遅らせるとどうなりますか?ウインドウがロードされる前のある時間に近似するタイマーによってイベントを遅延させた後、DOMReadyの発射後に何が起こるか? – davin

答えて

0
  1. 問題はIE8に固有です。それはIE10で廃止されました。

  2. 小さな待ちループを追加して修正しました。興味深いことに、ループは長時間(数ミリ秒)長くする必要はありませんでした。なぜIE8上でこの問題が修正されたのかが分かりませんが、それはありませんでした。

0

を呼び出す」のような回避策..

に対処DomオブジェクトdirectlのappendChild()それはすべてのブラウザ(IE7)で動作しませんでした。 DOM appendChild()またはYUI appendChild()を使用していますか?

+0

DOM appendChild。私はYUIを試してみる – DVK

関連する問題