助け合いの掲示板で質問をもらったのをきっかけに、JavaScriptの実験をしてみました。 もともとJavaScriptはそれほど多用したことがなかっただけに、あまり知らない分野でもあります。勉強も兼ねて色々調べてみたのですが、どうしても理解できなかったので、実験の結果だけ載せてみることにしました。(知っている方からの反応お待ちしてますm(__)m もともとの質問は、、、検索エンジンや他のページのリンクから飛んでくる場合、作成者が意図したフレーム構成になっていないことが多いですよね。これを、JavaScriptを使って、作成者が意図したフレームから見せることが出来るように、強制的にリダイレクトしたい、、、という内容です。(ちょっと前は、この逆で、他のサイトからフレームの中に取り込まれて表示されるのを避けるために、フレームで表示されたらフレームを破棄するようなスクリプトを作って・・・というリクエストが多かった気がします。その時々で流行があるのでしょう。) 実際のスクリプトは下記のようなものです。
ちょっとだけ解説すると、HTMLが表示されたら、top.frames.length でそのウィンドウのフレームの数を取得して、その数が「0」つまり、フレームで表示されていなければ 「飛ばしたい場所.html」 を表示する、というものです。これはこれでうまく動くのですが、このBODYの中に iframeタグでインナーフレームが作られていた場合に問題が起こりました。 iframe が使われているとうまく動かないのです。そこでとっさに思いついたのが、iframe もフレームの一種だから、フレームの数がその時点で top.frames.length=1 になっていて、上のスクリプトの条件を満たしていないので、ジャンプしないのでは・・・ そう思って、top.frames.length = = 1 と変えてみると、見事にジャンプするではありませんか(^^)/ 気をよくして、掲示板に「このように変更したら?」と提案してみました。そこまではよかったのですが、今度は、その質問された方がiframeを2つ使ったのです。top.frames.length = = 2 と変えたらしいのですが、そうすると、ジャンプしても、ジャンプした先で、またジャンプを繰り返す・・・よくわからない動きをする、という質問が来ました。 そこで、top.frames.length のカウントを検証するために、下記のようなスクリプトを書いて、その数を表示させてみました。するとどうでしょう、iframeの数がいくつになってもlengthは0のままです。数えていません。これはどういうことでしょうか?
ですが、確かに、最初のスクリプトでは top.frames.length = = 1 の条件を満たして、ジャンプしてます。条件は満たす(1になっている)のに、表示は0。非常に疑問に思ったので、様々な条件でそのカウント数を調べてみたのが下です。 ◆一つのページ内に iframe があり、フレーム表示されていない場合
まとめると、IEの場合ですが、単一ページに iframe がある場合、iframe の数が返される。ただし、関数以外から書き出された document.write等で表示された数は数えない。それ以外は、フレームの数を返す。ということでしょうか。 以上は、IE4.0、IE5.0、IE5.5、IE6.0で確認しました。 ネットスケープ、Opera(フリー版)については確認していないので、そのブラウザでご覧の方は、各自どうぞ・・・(^^; つまり、質問されたように、ページの中で2つの iframe を使っていて、そのページが単独で表示された場合に、top.frames.length = = 2 で本来表示させたいフレームページにジャンプさせると、ジャンプ先でも、フレームを使って表示させている以上、top.frames.length = = 2 の条件が成立してしまい、再帰的にページが呼び出されて、IEがクラッシュしてしまう・・・つまりブラウザクラッシャーみたいな動きにになってしまうようです。(クラッシュしてもOKな方は「こちら(別窓)」からお試しください。。。) もともとJavaScriptはネットスケープ社が開発したもので、IEについているのはJavaScriptじゃないのでは?といわれるとそれまでですが、JavaScriptの実装方法については、ブラウザ間でかなり違いがあるのが実情です。 また、バグでは?と思われるような動きをすることも多々あり、あまりJavaScriptに頼ったページを作りすぎると、それを見ている利用者側でかなり不具合を来たす場合もあるようです。 JavaScriptはほどほどに、、、見る側の環境を考えてということでしょうか?ですが、これはJavaScriptに限ったことではなさそうです(笑 (2003/8/17 by あいまい)
|
|
『ウェブ・プログラムの実験場!』 by あいまいモード・コム(www.iMYmode.com) |