プロが教えるわが家の防犯対策術!

IEだと動くんですけど、Netscapeだと動かないんです。なんかsecurityErrorが出まして・・・。子画面を閉じるまでは動いてるんですが、親の再描画の部分でエラーが出てるようです。どこが原因かお分かりになる方いらっしゃいますか?よろしくお願いします。


<%//処理を何秒後に行うか 時間をset%>
function setTimer(){
timer1=setTimeout("clo()",3000);
timer2=setTimeout("location()",3000);
}

<%//windowをclose%>
function clo(){
window.close();
}

<%//親画面を再描画する%>
function location(){
var url='<html:rewrite page="/hogehoge/hoge.do" />';
window.opener.location.href = url+'?member_id='+変数;
}

A 回答 (4件)

あれ?


でも一字一句同じurlを読み込めば再検索されると思いましたが・・・
↑これは余計でした。
えー、親画面の再描画を先にすると動かないそうですね。
でしたら、親画面のほうで子画面を閉じて渡された引数をurlに組み込んで再描画するようにしましょう。
子画面の処理は子画面で、親画面の処理は親画面で行うわけです。
まず、親画面となるhtmlに以下を足します。
<script type="text/javascript">
<!--
function redraw(num){
location.href='<html:rewrite page="/hogehoge/hoge.do" />?member_id='+num;
}

function location(number){
timer2=setTimeout("redraw("+number+")",3000);
}
//-->
</script>
そして、あなたの子画面のsetTimer()を
setTimer(){
timer1=setTimeout("clo()",3000);
opener.location(変数);
}
にします。
これで、子画面は自分を閉じるためだけにタイマーを持っているので、タイムラグが生じても問題なく動作するはずです。

この回答への補足

質問ですが、setTimer()の中の opner.location(変数)っていうのは、子画面のjavaScriptから親画面に記述したlocation(number)を呼び出すというイメージになるのでしょうか? 子画面から、親画面のjavaScriptを呼び出すとういのか可能なんですか?

補足日時:2005/05/29 14:58
    • good
    • 0

>子画面から、親画面のjavaScriptを呼び出すとういのか可能なんですか?


できますよ。
私はよく別フレームの関数を呼び出したりしていますがそれと同じ要領で。
例えば、フレームAからフレームBにある関数send()
を呼び出すには
top.B.send();
としてやればいいんですよ。
参考URLのサブウィンドウ編
[13]親ウィンドウの関数を呼び出す
[15]親ウィンドウからサブウィンドウの関数を呼び出す
あたりを見れば分かると思います。

参考URL:http://www.openspc2.org/reibun/javascript/index. …
    • good
    • 0

何が原因なのかは知りませんが、


再描画=リロードなら、

window.opener.location.href=window.opener.location.href;

と、してやるとリロードできます。これだと

var url='<html:rewrite page="/hogehoge/hoge.do" />';
window.opener.location.href = url+'?member_id='+変数;

の部分が簡単になるので原因究明の一助になるかと。

この回答への補足

単純なリロードではなく、再検索しなおすという意味の再描画なのです・・・。

補足日時:2005/05/28 23:07
    • good
    • 0

現在NNが動かせる環境にないので、推測なのですが


window.closeされてる状態でlocation()を動かそうとするからではないでしょうか。
clo()を若干後にしてやるとか
あるいは、処理をまとめてしまってwindow.closeを後にしてやるとか
clo()の中で、
clearTimeout(timer2);
clearTimeout(timer1);
してやる(window.closeする場合には、その前に、タイマー停止する)
などしてみられたらどうでしょう

この回答への補足

それは試したんですが、ダメでした(^^; 親画面を再描画してから、子画面を閉じようとしたんですが再描画の処理で止まってしまっているらしく、子画面が閉じなくなってしまいまして・・・。やりたい事は、子画面を閉じた後に、親画面を再描画なんですが、単純に再描画ではなく、引数を渡して、一覧を再検索すると言う処理なんのですが・・・。なにかいい考えありますか?

補足日時:2005/05/28 23:04
    • good
    • 0

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