インラインフレームのあるページで、

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

親フレームの関数のなかで、
(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

回答の条件
  • 1人2回まで
  • 登録:2006/06/09 03:00:22
  • 終了:2006/06/09 13:53:04

ベストアンサー

id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/06/09 09:55:29

ポイント35pt

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

子フレームがロードされた時に、子自身の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>

id:hiyarihatto

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

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

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

解決しました。

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

2006/06/09 13:40:20

その他の回答(1件)

id:yo-kun No.1

yo-kun回答回数220ベストアンサー獲得回数302006/06/09 04:43:55

ポイント35pt

child.htmlのほうで

<body onload="test()">

でどうでしょう?


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

id:hiyarihatto

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

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

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

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

onLoadで解決しました。

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

2006/06/09 13:38:16
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/06/09 09:55:29ここでベストアンサー

ポイント35pt

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

子フレームがロードされた時に、子自身の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>

id:hiyarihatto

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

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

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

解決しました。

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

2006/06/09 13:40:20
  • id:llusall
    こちらこそ、いるか君いただき、ありがとうございました。(^^)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません