- ベストアンサー
インラインフレームがときどき表示されない
別窓を開くと、別窓内のインラインフレームが表示されるときとされないときがあります。 プログラムは以下のようにしました。 ・メインファイル <script language="javascript"> <!-- var subWin = null; function disp(nValue){ subWin = window.open("別窓ファイル名",""); subWin.menu.location.href = "2003" + nValue + "menu.html";} //--> </script> <body> <a href="JavaScript:disp('01');"> <img src="img1.jpg"> </a> <a href="JavaScript:disp('10');"> <img src="img10.jpg"> </a> </body> ・別窓のファイル <IFRAME src="" id="menu"> </IFRAME> エラーメッセージは以下のようにでます。 『subWin.menu.locationはNullまたはオブジェクトではありません。』 プログラムに間違いがあればご指摘お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>処理待ちする方法 setTimeout()を使うのが普通です。 ただ、ご質問の場合は何秒待てば良いのかというのが ローカルの環境で左右され、なかなか難しいと思います。 別窓に月(?)の情報を渡して、 onloadを使えばよろしいのでは・・ ・メインファイル <script> function disp(nValue){ window.open("*****.html?"+nValue,""); } </script> <body> <a href="JavaScript:disp('01');"> <img src="img1.jpg"> </a> <a href="JavaScript:disp('10');"> <img src="img10.jpg"> </a> </body> ・別窓のファイル <script> function x(){ nValue=location.search.substring(1,location.search.length); menu.location.href = "2003" + nValue + "menu.html"; } window.onload=x; </script> <IFRAME src="" id="menu"> </IFRAME> .
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>具体的にプログラムをどのようにすればよいのか #2のように、別窓側で処理できれば、onload が使えるので楽ちんです。コールバックするような感じにしてもいいかも。 別窓側をいじれない時は、やはり待つしかないので 処理待ちする時は、 http://okwave.jp/kotaeru.php3?qid=1918363 みたいな感じでやればイイと思います。 要点は、 if(開いた先のオブジェクトがあるかどうか検査して、無い場合){ setTimeout を利用して、適当な時間を置いてもう一度やってみる } else { setTimeout をクリアして、やるべき処理をする } ってことです。 注意点: ※IEでは、id でオブジェクトに直接アクセスできるが、全てのブラウザではそうではないので、getElementById を使う方がよい。 ※subWin.menu がnull の時、subWin.menu.location は、当然 『subWin.menu.locationはNullまたはオブジェクトではありません。』 になるのでそういう階層に注意。 ※呼び出すURLがあると分かっている時はいいが、あるかないか分からない時は永遠に待つようなことにならないように、試行回数(最大待ち時間?)を決めておくといいかも。
お礼
再度のご回答ありがとうございます!! 処理待ちの方法はなんとなくタイマーかな~とは思っていたのですが、タイマーは苦手でonloadを使うことにしました。 どうもありがとうございました!!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
(1)subWin = window.open("別窓ファイル名",""); (2)subWin.menu.location.href = "2003" + nValue + "menu.html"; のような場合 (1)でページが開き終わるまえに(2)を実行しようとすると、まだ、当該ウィンドウのオブジェクトが全部できていないので、 『subWin.menu.locationはNullまたはオブジェクトではありません。』 のようなメッセージが出る場合があります。 当該ページの読み込みが完了した後(わかりやすくいえば、onload イベントが発生したあと)に操作する必要があります。 言ってみれば、処理待ちする必要があります。
お礼
ご回答ありがとうございます。 なるほど!!ですね。 おっしゃってる意味はよーくわかります。 だから、エラーがでるときとでないときがあったんですね。 しかし、私には処理待ちする方法がわかりません。 具体的にプログラムをどのようにすればよいのか教えていただけるととてもありがたいのですが。。。
お礼
ありがとうございます!! 教えていただいたプログラムでできました!! 処理待ち方法はなんとなくタイマーかな~とは思っていたのですが、どうもタイマーは苦手で。。。 JavaScript初心者なもので、onloadをよく知りませんでした。 しかも、最初はonLoadにしていて、全く動かないやん!と思ったらonloadにしたら動きました!! onloadとonLoadじゃ違うんですね。 そんなことも知らなかったなんて。。。 本当にありがとうございました!!