あるページから別フレームの画像を切り替えるスクリプトを作成していて困っています

フレーム1側ソース
...
function _sendData(num){
 window.top.frames[1]._imgChange(n);
}
...
<body onLoad="_sendData(n)">
...

フレーム2側ソース
...
for (i=0;i<2;i++){img[i]=new Image();}
img[0].src = "images/abc.jpg";
img[1].src = "images/def.jpg";
function _imgChange(num) {
 nam = "imgname";
 document.images[nam].src = img[num].src;
}
...
<img src="xyz.jpg" name="imgname">
...

上記ソースのように作成しましたが
IE5.5とネスケ4.75で正常に動作するのですが、Netscape6だけうまく動作しません
解決方法その他アドバイスお願いします

このQ&Aに関連する人気のQ&A

A 回答 (2件)

こんにちは。


実際のページを拝見しました。
HTMLをダウンロードして、(CGIは生成されたHTMLを利用するしか
ないですが)こちらのローカル環境でいろいろ試してみました。
pagename.htmのなかで、以下のようにスペーサの制御を
している部分がありますが、これをまるまる削除したところ、
当方の環境ではNetscape6でも想定どおりの動きをしました。

-------------------------------------------------------
<tr height="3" valign="top">
<td width="153" bgcolor="#FFFFAD"><img src="http://homepage2.nifty.com/cradoll/images/spacer … width="150" height="3"></td>

<SCRIPT language="JavaScript"><!--
if(navigator.appName.charAt(0) == "N" && parseInt(navigator.appVersion) < 5){
document.write('<td width="523" bgcolor="#000000"><img src="http://homepage2.nifty.com/cradoll/images/spacer … width="524" height="3"></td>');
}else{
document.write('<td width="526" bgcolor="#000000"><img src="http://homepage2.nifty.com/cradoll/images/spacer … width="526" height="3"></td>');
}
//--></SCRIPT>
<td width="100%" bgcolor="#FFFFAD"><img src="http://homepage2.nifty.com/cradoll/images/spacer … width="100%" height="3"></td>
</tr>
-------------------------------------------------------

Netscape6で問題のページを見ようとすると、ページのダウンロードが
いつまでたっても終了しない(Netscapeのロゴが止まらない)という
状態になるのが気になりました。以前仕事上で同様の現象を見たこと
がありますが、そのときには
 1.document.write()を極力使わない。
 2.METAで文字コードを指定する。
などとしたところ解決しました。ですが今回のケースはそれでも解決でき
ませんでした。
 当方の環境が実際の環境と全く同じというわけではないので(CGIなど)
これで本当に解決するかどうかちょっと判断がつきません。
 詳しい方がいらっしゃいましたら、フォローをお願いいたします。
    • good
    • 0
この回答へのお礼

ありがとうございました
もともとはHTMLでのみ記述していたのですが
ページの更新作業や同内容のソースが多くなり
CGIで記述したものだったので面倒くさがりはだめですね

ブラウザによるスペーサの大きさを変える部分を
CGI側で行うようにすれば何とかなりそうです

お礼日時:2001/03/18 21:38

こんにちは。


これで想定どおりなのか、いまいち自信がないのですが、
とりあえず以下のようにしてみたところ、正常に動くように
なりました。

フレーム1のソース-------------------------------
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
<!--
var m_num;
function _sendData(num){
m_num = num;
m_sendData();
}
function m_sendData(){
if(window.top.frames[1].ready == true){
window.top.frames[1]._imgChange(m_num);
} else {
setTimeout("m_sendData()", 100);
}
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="_sendData(1)">
</BODY>
</HTML>

フレーム2のソース-------------------------------
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
<!--
var ready;
var img;
ready = false;
img = new Array(2);
//for (i=0;i<2;i++){img[i]=new Image();}
//img[0].src = "images/1.jpg";
//img[1].src = "images/2.jpg";
img[0] = "images/1.jpg";
img[1] = "images/2.jpg";
function _imgChange(num){
nam = "imgname";
//document.images[nam].src = img[num].src;
document.images[nam].src = img[num];
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="ready = true">
<!--
 (*1)
-->
<IMG src="images/3.jpg" name="imgname">
</BODY>
</HTML>
-------------------------------------------------

どうやら、フレーム2のイメージ部分のタグがロードされる
前にフレーム1からそのイメージオブジェクトへアクセス
しようとしたため、正常に動作しなかったのだと思われます。
試しに(*1)部分に大量の文字列を挿入してみるとIEでも
正常に動作しなくなります。Netscape6 は動作が重いので、
よりロードに時間がかかり、バグが顕在化したのだと思います。

それにしても、これで回答になったのでしょうか。
もっとよいやり方を知っている方がいるような気もします。

それでは、失礼します。
    • good
    • 0
この回答へのお礼

早速のありがとうございました
しかし原因がわからないですが、うまく動きません
フレームの入れ子をしているせいか、画像数が実際は15枚と多いせいか
ページの描画にCGIを利用している
などほかにも原因がありそうなんですが・・・

http://homepage2.nifty.com/cradoll/main.html
がそのページです
ページの内容は気にしないで下さい(笑

お礼日時:2001/03/18 14:50

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ