片方のフレームのURLと画像を同時に変えるには?

[上に] [前に] [次に]
コマ [E-Mail] 2000/06/05(月) 15:27:52
こんにちわ。

フレームで画面を2分割して、片方をメニュー用に、片方をメインの
コンテンツ用にするページを作っています。
最初にメニューフレームの方に、メインフレームに表示されたファイルの画像だけを入れ替えるようなリンクをはりました。
これはあるページの特定の画像を入れ替えるものなので、メインのフレームに
画像を入れ替えるターゲットのファイルが表示されていない場合にエラーが起こります。
そこで、if文を使ってメインフレームのファイル名がターゲットのファイルであるかどうか確認し
もしそうでなかった場合にはそのターゲットファイルをメインフレームに表示させてから
画像を入れ替えるようにプログラムを書きました。

ところが、メインフレームにターゲットファイルを表示させることはできても
それと同時に画像を入れ替えることはできず、エラーが起こってしまいました。
これはどうしてなのでしょうか?

メニューフレームのファイルのヘッダ部分は以下のとおりです。
MAIN:メインフレームのname
main.html:入れ替える画像を表示するメインフレームのファイル
img1:main.html中の入れ替える画像のname
引数a:3種類のどの画像を入れ替えるかを決めるもので
リンクを押したときにaに0,1,2のどれかの値が入ります。


if(navigator.appVersion.charAt(0) >= "3"){
  img = new Array();
  img[0] = new Image; img[0].src = "pict/pink.jpg";
  img[1] = new Image; img[1].src = "pict/yellow.jpg";
  img[2] = new Image; img[2].src = "pict/blue.jpg";

}
function chg_img(a){  //aは上の配列に対応
  if(navigator.appVersion.charAt(0) >= "3"){
     if(parent.MAIN.location.href != "main.html"){
       parent.MAIN.location.href="main.html";
     }
     parent.MAIN.document.img1.src=img[a].src;
  }
}

説明がわかりにくいかもしれませんが、どうして動かないのか、
または別の方法をご存知でしたら、教えてください。
よろしくお願いします。

MUG 2000/06/05(月) 15:55:14
読み込みが終ってないからではないでしょうか。

いくらか関数を作り、
(1)"MAIN"の読み込みが終ったら(2)の関数を実行。
(2)"img1"が読み込み済みであることを確認し、(3)の関数を実行。
(3)"img1"のアドレスを取り替える。

・・・で、ボタンで(1)の関数を実行するようにすれば良いのでは?

MUG 2000/06/05(月) 16:08:56
追加

MAINフレームに出すmain.htmlにJavaScriptを書いて、
onLoadで自分(main.html)の画像を入れ替えれば
エラーにならないはずですし、onLoadでMENUフレームの
関数を呼び出す手もあると思います。

また、一度デフォルトの画像が読み込まれるのを待っているのが
いやなのであれば、(onLoadだと一度画像が表示されますから)
思い切って、MENUのHTMLすべてをJavaScriptで記述する方法も
ないことはないです。(いきなり思い通りのページができますが、
IE4以上でないと無理だと思います。)

コマ [E-Mail] 2000/06/07(水) 17:56:49
[[解決]]
MUGさん、ありがとうございます。
onLoadでメニューの関数や変数を呼び出すのがうまくいかなかったので
freamsetに変数をおいて、
メニューをクリックしたらfreamsetの変数に値を代入し
その値をメインフレームのほうがonLoadでとってくる
というやり方にしたらうまくいきました。

でも、IEだとデフォルトの画像が表示されないのですが
ネスケだとサブリミナル効果のようにデフォルト画像が表示されるので
かっこわるーいかも。

でも、問題は解決しました。本当にありがとうございました!。

[上に] [前に] [次に]