人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

インラインフレームのあるページで、
親フレームからインラインフレームのソースを変更した直後、親フレームからインラインフレームの関数を呼び出すと、エラーになります。

親フレームの関数のなかで、
(ifrmはインラインフレームのnameの値)
1行目:parent.ifrm.location.href="child.html";
2行目:parent.ifrm.test();←child.htmlにはtest()という関数がある

とすると、
parent.ifrm.test in not a function
というエラーが出ます。
恐らく1行目が反映される前に2行目を実行しているからと思うので、
1行目と2行目の間に
alert()を挿入したら2行目が正常に動作しました。

質問したいことはalert()を使わず動作させることはできないでしょうか?
setTimeoutやclearTimeoutを使えば出来る気がするのですが…

Timer関数の使い方がいまいち分かっていません。

もしTimer関数でもいいので、分かる人がいましたら教えてください。
お願いします。

☆ソース
【親フレームのHTML】
http://www.peacelove.biz/pg/hatena/parent.html

【子フレームのHTML】
http://www.peacelove.biz/pg/hatena/child.html

●質問者: hiyarihatto
●カテゴリ:インターネット ウェブ制作
✍キーワード:href HTML name test いまいち
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● yo-kun
●35ポイント

child.htmlのほうで

<body onload="test()">

でどうでしょう?


それともどうしても親フレームから子フレームのtest()を呼び出したい理由があるのでしょうか?

◎質問者からの返答

親フレームから呼びたいのは、

親フレームの関数からの条件に応じて

子フレームの関数を実行したいからなのですが、

子フレームの関数から親フレームの関数を呼び出せばいけるので、

onLoadで解決しました。

ありがとうございますm(_ _)m


2 ● llusall
●35ポイント ベストアンサー

逆の発想で実現してみてはどうでしょうか?

子フレームがロードされた時に、子自身のtest関数を実行して良いかどうか、親に聞いてみる。

以下、ソースです。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<head>

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta http-equiv="Content-Script-Type" content="text/javascript">

<title>a</title>

<script Language="JavaScript">

function test()

{

//  parent.ifrm.location.href="child.html";

//  parent.ifrm.test();

    document.all.flag.value = "ok";

    ifrm.location.href="child.html";

}

</script>

</head>

<!--=style="text-decoration:none"でリンクの線を消す-->

<BODY onload="test()">

<input type="hidden" name="flag" >

<iframe src="Dummy.html" name="ifrm" width="500" height="500"  scrolling="yes">

</iframe>

</BODY>

</HTML>


<html>

<head>

<title></title>

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script language="JavaScript">

function test()

{

    if (parent.document.all.flag.value != "ok") return;

    alert( "テストです" );

}

</script>

 </head> 

<body> 

childHTML

</body> 

</html>

<script language="JavaScript">

// 注意:body の onload で指定すると2重に実行されてしまう様子

test();

</script>

◎質問者からの返答

いつもお世話になっております。

親フレームにフラグを用意して、

子フレームから親フレームのフラグにアクセスして分岐する方法、参考にさせていただきました。

解決しました。

ありがとうございますm(_ _)m

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ