読者です 読者をやめる 読者になる 読者になる

YAHOO.util.Event.onDOMReadyがうまく動かないよ

YUIにおけるイベント管理
で書いたとおりイベントハンドラonloadは画像を含むすべてのコンテンツがロードされてから関数を実行する。
それがいやな人は、JQueryのdocument.ready()とかYUIのYAHOO.util.Event.onDOMReadyを利用してDOM構造が構築された時点で関数を実行するようにする。


DOM構築がされていないのにappendChildをやるとブラウザが(IEが)クラッシュするからだ。
(「インターネットサイトhttp://〜〜は開けません。操作は中断されました」となんとも不親切なエラーが出る)

#googleMapの貼り付けで同エラーが発生するのもDOMの動的な生成が原因かもしれない。(GoogleMap貼り付けたことないから知らないけど


DOM構造が実行可能かどうかの判別方法はブラウザ毎に方法があるが、YUIライブラリのonDOMReadyのIEでのDOM構築完了判別はscriptタグにdefer属性を設定してscriptタグの遅延読み込みを行い、そのscriptタグのonreadystatechange属性がcompleteになったらDOM読み込みOKとしている。


しかし、私の環境だと初回読み込み時のDOM構築判別は問題なかった(DOM構築後に関数が実行されてappendChildも問題なかった)、shかしF5キーで再読み込みするとDOM構築判別処理がうまく動作せずに、onDOMReadyの中でappendChildすると「インターネットサイトは開けません〜〜」エラーになる。
scriptタグのキャッシングでもしてるんだろうか。


とりあえずonDOMReady時にappendChildするような処理はあきらめて、イベント発生時(onclickとか)の初回にappendChildするように修正して凌いだ。



要はページ読み込みのタイミングでappendChildするなってことだな。うん


※追記
YUIライブラリのonDOMReadyの実現方法はよくみたら違いました。
【javascript】DOM読み込み判定処理