JavaScriptのlocationメソッドで子ウィンドを閉じる方法

このQ&Aのポイント
  • JavaScriptのlocationメソッドを使用して、子ウィンドウを閉じる方法について説明します。
  • 子ウィンドウを開いた後に親ウィンドウに指定のURLを表示させるためには、window.opener.location.replaceメソッドを使用します。
  • しかし、親ウィンドウにURLが表示されない場合は、親ウィンドウを再読み込みする必要があります。この場合、window.opener.location.reloadメソッドを使用します。
回答を見る
  • ベストアンサー

javascript の locationメソッド

Javascript で、子(サブ)ウィンドを使っています 子ウィンドを開いて、とある処理を終了後に親ウィンドに指定のURLを表示させて子ウィンドを閉じる、という処理をしたいと思っています。 まず、親ウィンドにURLを渡すところはうまく動きます。 そのページはPHPで作られたページで、できており子ウィンドの処理でセッションに保存されたセッション変数を読み込んで動きます。 ページは遷移するのですが新しいセッション変数が読み込まれません。 ページをリロードすれば動作するので、子ウィンドを閉じる前に親ウィンドを再読込させればよいかな?と思ってreloadを入れてみました。 すると、リロードはしているようなのですが、今度は渡したURLに遷移しなくなってしまいました。 window.opener.location.replace(URL); window.opener.location.reload('true'); window.close(); このような処理はどうすればよろしいでしょうか? それとも諦めるしかありませんか? また、過去に同様な質問があるようでしたら、そのurlを教えていただけると幸いです。 見つけたのですが、探しきれませんでした。

  • kvex
  • お礼率75% (3/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ご提示のスクリプトだと、通常のブラウザのアドレス欄にURLを記述してリターンキーを押すのと同時にF5キー(リロード)を押しているようなものではないでしょうか。 この時の動作は何が正しいのかは知りませんが、ブラウザによって、あるいは状況によっても結果が異なる可能性があります。 >ページをリロードすれば動作するので、 無駄にリロードするようなことをせず、一度の読込みで正しく動作するように考えた方がよろしいかと。 >子ウィンドの処理でセッションに保存されたセッション変数を読み込んで動きます。 どのようなタイミングで変数をphp側に送っているのか不明ですが、送信と(親ウィンドウの)ページ遷移(読込み)とのタイミング(順序)が正しく行なわれるようになっているでしょうか? 特に、通信を伴う処理の場合、大元のスクリプトでは正しい順序であっても、通信時間によっては実際の処理の順序が逆転することが起こり得ます。 あるいは、親ウィンドウ側でキャッシュを読み込んでいるような可能性はありませんか? このあたりを整理することで、リロードしなくとも動作するのではないかと推測しますが… とはいうものの、ご提示のスクリプトをむりやり動作させるには…  1)親ウィンドウのページ遷移を実行  2)親ウィンドウを監視して、読込み終了を待つ  3)読込み終了後、親ウィンドウをリロード のような手順で行なえば、少なくともリロードはできそうに思いますが。

kvex
質問者

お礼

遅くなりました。 おおよそご指摘のような手順で完成しました。 ありがとうございました。 chromeのキャッシュに泣かされていたので、強制的にリロードさせたりしてみたかったのです。 ありがとうございました。

関連するQ&A

  • 親ウインドのASPをリロードさせたい

    題名通りで、子ウインドをCloseする際に、親ウインドをリロードさせたいんです。 子ウインドで、 <Script Language="JavaScript"> window.opener.location.reload() window.close() </Script> と書いてみたんですけど、変わってる形跡が無いんですー(-_-;)

  • JavaScriptでのリロードについて

    ネットで調べていましたが解決する事ができませんでしたので投稿しました。 宜しくお願いします。 ページ間の制御について質問します。 Aページから別ウィンドウを開いてBページを表示しています。 Bページではデータの入力画面→確認画面→完了画面の流れで処理をしています。 Bページの完了画面には別ウィンドウでCページを表示するボタンがあります。 ※Cページを表示する際にBページを閉じています。 Cページではファイルのアップロード画面→確認画面→完了画面の流れで処理をしています。 Cページの完了画面にはCページを閉じてAページをリロードしていますがうまく更新できません。 JavaScriptのソースは下記の通りです。 if(!window.opener || window.opener.closed){ } else{  window.opener.location.reload(); } window.close(); ※このJavaScriptはCページのボタンのonClickに指定しています。 試しに単体で下記のJavaScriptのソースを指定してみましたが駄目でした。 window.opener.opener.location.reload(); どのようにすればCページを閉じてAページをリロードする事ができますか。 似たような内容で申し訳ありませんがご教授、宜しくお願いします。 では、失礼します。

  • location.replaceについて

    親ページから子ページを表示います。 ※JavaScriptのwindow.openで子ページを開いています。 子ページにはテキストボックス等を配置していて項目を入力したら[閉じる]ボタンを押下して子ページを閉じて子ページで入力された値で親ページを再表示して反映させていますがここで1つ問題が発生してしまいました。 ※子ページの[閉じる]ボタンにはonClickでJavaScriptを設定しています。 JavaScriptの内容は下記の通りです。 function closeScript(){   window.opener.location.reload();   window.close(); } 押下すると「再試行」のダイアログが表示されてしまって・・・ ネットで検索して調べてみたら「再試行」のダイアログの制御はできないとの事でした。 再度、ネットで調べていたら下記のような記述がありました。   location.replace(location.href); 上記のJavaScriptを下記のように変更して子ページの[閉じる]ボタンを押下してみたら「再試行」のダイアログが表示されず、子ページを閉じる事が出来ました。 しかし、親ページは何も反応がないような・・・ そこで皆さんに質問があります。 「location.replace(location.href);」が何をやっているのかをネットで調べてみましたが・・・ 「location.replace」・・・「指定したページへ移動する」との事でした。 「location.href」・・・現在表示しているページのアドレス(URL)を示す文字列です。 上記のスクリプトは何を行っているのでしょうか。実際に動かしてもうんともすんとも言わないので・・・ くだらない質問で申し訳ありませんがわかりやすく教えていただけませんでしょうか。 宜しくお願いします。

  • サブウィンドウから、別のサブウィンドウをリロードさせたいのですが、できるのでしょうか?

    A.html(親ウィンドウ)から、子ウィンドウ(B.html)と子ウィンドウ(C.html)があります。 子(C.html)から、子(B.html)へリロードさせたいのですが、うまく行きません。 window.opener.Bウィンドウの名前.location.reload(); close()などは、子から子でもうまく行くのですが、reload()は不可能なのでしょうか? どなたか、教えてください。お願いします。

  • スクロール位置に関してです

    お世話になります PHP4でHP作成しています Windowのスクロール位置に関して質問させて下さい 親Windowから子Windowを呼び出して 子Windowを閉じるタイミングで 親Windowのリロード処理を行っています そこで、親Windowのスクロール位置がTopに戻ってしまう現象が起きてしまい 困っています リロード処理はJavaScriptを使用して  echo "<script type='text/javascript'>";  echo "window.close();";  echo "window.opener.location.reload();";  echo "</script>"; と書いています 通常F5キーの更新処理を行うと スクロール位置が更新前の位置にセットされるので JavaScriptからの指定も上手く行くのではないかと思ったのですが… 宜しくお願いします

  • header("Locationとリロードについて

    Chromeでリロードしても、header("Location がうまくいきません。 リロードした際も、URLを遷移させるにはどうすればいいでしょうか? ▼index.php <?php  header("Location: http://yahoo.co.jp/");  exit; ?> ・URL入力後、右クリック&再読み込み → 遷移しない ・URL入力後、F5 → 遷移しない ・URL入力後、URL入力欄左にある「このページを再読み込みします」のマーク → 遷移しない(遷移するときもある?) ・URL入力後、Enter → 遷移する ・URLを「貼り付けて検索」 → 遷移する 後、Chromeで、以下の3つに何か違いはあるのでしょうか? ・右クリック&再読み込み ・F5 ・URL入力欄左にある「このページを再読み込みします」のマーク

    • ベストアンサー
    • PHP
  • 子画面を自動で閉じた後、親画面を再描画するJavaScriptが・・・・

    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='+変数; }

  • JavaScriptでページを一度だけリロード

    とあるページにアクセスした際、JavaScript(jQuery)を使って一度だけページをリロードしたいと思っております。 <script language="JavaScript"><!-- function reload() { if (window.name != "test") { location.reload(); window.name = "test"; } } // --></script> 上記のような記述で試みたのですが、リロードしてくれません。 他に対応できる方法がございましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

  • IE8のwindow.opener.location.href動作について

    宜しくお願い致します。 IE8のjavascript「window.opener.location.href」の動作がIE7から変わった様で、思い通りの動作をしなくなりました。 1、WEBサーバ側の親ウィンドウからWinXPにインストールしたローカルサーバ側のPHPスクリプトへwindow.openで子ポップアップウィンドウを開きます。 2、ローカルサーバ側の子ポップアップウィンドウで特定のプログラムを走らせ、WEBサーバ側の親ウィンドウへローカルサーバ側の子ポップアップウィンドウからwindow.opener.location.hrefで、親ウィンドウの表示ページを切り替える。 という動作をしていたのですが、IE8にアップデートしたら、ローカルサーバ側の子ウィンドウからWEBサーバ側のURLを切り替えると、別ウィンドウで開いてしまい、親ウィンドウが2ページに分かれます。 さらに、元の親ウィンドウはURLが変更にならず、新しく開いたページのURLだけ変わっています。 この動作をIE7と同じ様に、子ウィンドウから元の親ウィンドウのURLを変更させるにはどうすればよいのでしょうか?

  • PHPのみでjavascriptと同じ動きができないでしょうか。

    PHPのみでjavascriptと同じ動きができないでしょうか。 やりたいことは以下の内容です。 1.メインページ(A) のリンクから サブウィンドウ(B) を別窓で開く。 2.サブウィンドウ(B) で、フォーム処理(修正登録)する。 3.サブウィンドウ(B) を閉じたら、メインページ(A) を更新する。 javascriptだと閉じるボタンに window.opener.location.reload(); とかでできると思うのですが これをphpのみで実装したいのです。 phpのみでjavascriptと同じことはできないでしょうか。

    • ベストアンサー
    • PHP