イベント処理( 1 )
最終更新日:

前へ 目次 次へ

 今回から数回に分けて、イベント処理に関する食えない事情を採り上げます。
その第1回は onLoad と onUnload イベントに関してです。


onLoadの怪

 DHTML でアクティブなドキュメントを作成する場合、 onLoad イベントを使用して位置を調整したり、 動作を開始する場合が少なくありません。

 そんな時、「完璧だ!」と思ってサーバにアップして NN で確認すると、

*** has no properties」 ( * 印 はいろいろ )

などという、冗談みたいなメッセージに悩まされることがあります。
( Windows版での話です。他のプラットフォームでは確認していません f(^^;
しかも、この現象は「常に」ではなく、「時々」なので、始末に終えません。

 このような現象には、経験上ではありますが共通要素があるように見えます。

HTML の BODY 内で document.write メソッドを使用している
ハンドリングしようとするレイア内に イメージ 又は CGI が含まれる
onLoadイベント内では上記現象が発生するが、 ボタンなどの操作をトリガとする場合には発生しない

 こう並べてみると、次の仮説が浮び上がります。

●仮説1
イメージや document.write の出力は HTML の読込みと並行して実行される。

▼根拠
イメージが大きい場合、複数に分割した方が読込みが速い。 また、document.write を実行するとディスクへの書込みが発生する。
●仮説2
「onLoadイベントはブラウザがローディング処理を終了した時点で発生する」 とあるが、実際には処理が残っている。( スレッド管理にバグ(?)がある )

▼根拠
ネットワークの負荷状況やブラウザのキャッシュの状態で現象が変わる。

次は、ソースコードを解析して裏づけをとるのが正道でしょうが、 原因追及ではなく回避が目的なので、回避策のみ考えると結局

「BODYタグ内では document.write でレイアを作成しない」

のが一番のようです。
( できれば、 document.write 関数自体使わない方が良さそうです )

 そこで、問題の現象が出る HTML を全て onLoad イベント以降に 直接生成するように修正したら、少なくとも知っている限りでは発生しなくなったようです。
( この類の問題の修正は、確認がとれないので困ります。 f(^^;


謎のonUnload

 onUnload は多くの場合 JavaScript アニメーションなどの setTimeout を使用して継続する処理で、 ユーザがページを切替えたときに継続している処理を停止するために使用します。

しかし、対象がフレーム構成をとる場合には、 NN では途端に食えないイベントに変身します。つまり、

●親フレームの食えない onUnload ●子フレームの食えない onUnload

です。どうやら、onUnload イベントで処理が必要な場合はフレーム構成をとらな い方が無難かもしれません。

どうも、最近書く話題は NN の問題が多いような気がする...      f(^^;;

前へ 目次 次へ


Copyright(c) 1999 ShinSoftAll rights reserved.