![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
対象ブラウザはIE6~8です。
2つのウィンドウA/Bが連動するプログラムを作っています。
ウィンドウAにはウィンドウBを開くためのボタンがあり、
Aより先にBが開くことはありません。必ずAからBが派生します。
Aはwindow.openの戻り値を保持することで、B内部のJavaScriptにアクセスします。
Bはwindow.openerプロパティを経由することで、A内部のJavaScriptにアクセスします。
しかし、Aには自身をリロードする機能があり、
リロードすると保持していたBのウィンドウオブジェクトを失ってしまいます。
そこでAがリロードし終わったとき(onloadのタイミング)に、
何とかしてBのウィンドウオブジェクトを取得しなければなりません。
window.openではウィンドウに名前を付けることができますが、
その名前からウィンドウオブジェクトを取得するような、
document.getElementByNameみたいなメソッドは存在しないでしょうか?
あるいは、BからAの監視を続け、リロードが終わった時に
window.opener経由でメッセージを送る等の処理を実現する手段はないでしょうか?
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
>あるいは、BからAの監視を続け、リロードが終わった時に
>window.opener経由でメッセージを送る等の処理を実現する
>手段はないでしょうか?
簡単なテストをしてみましたが、できないことはなさそう。
ただし、いろいろな可能性があるので、それにちゃんと対処しようとすると少々面倒そうな気が…
以下、正常な処理の場合。
1)AのunloadイベントでBの関数を呼び出す。
2)Bの関数からsetTimeoutなどでBの監視関数を呼び出す。
3)Bの監視関数はopenerのreadyStateがcompleteになるまで、自分自身をsetTimeoutなどで呼ぶ。
4)completeを確認したら、opnerの受取り用関数にB自身を引数で送る。
単純に予定通りの操作しかなければ(↑)で再取得できるみたいですが、実際は、Bが手動で閉じられていたりAが別のサイトにジャンプする(unloadイベントなので)などなどその他のケースも考えると、けっこう面倒そうです。
別のアイデアとして…
・Aから同じ名前でBを開き直せば(多分、名前を付けているでしょうから)、Bを再取得することが可能です。
・それなので、Bを開いているか否かをクッキーに保存しておいて、それを確認してAのload時にBを開くかを決めることにしてあげればよさそう。
・Bが別のサイトに遷移したりクローズされたりする場合を考えると、Bのunloadでクッキーを書きかえる。
・Bのリロードも考慮するなら、loadでクッキーへ書込む必要があり、結局は、クッキーの書込みは全てB側で行い、Aは参照するだけということになりそう。
こちらはテストしていませんので、アイデアのみです。他に問題があるかも。
いずれにしろ、面倒そうですね。
回答ありがとうございます。
同名でwindow.openし直す、ナイスアイディアです。
お陰さまで望み通りの動作が実現できました。
細かい検証はこれからやっていきますが、大変助かりました。
ありがとうございました。
No.3
- 回答日時:
質問タイトルの答えは
http://okwave.jp/qa/q6731947.html へ。ただし、再読込した時点で window.b を見失うような気もしますけどね。
私なら #2 で紹介されているように window.b の open/close をどこか(CookieとかGETパラメータとか)に記憶させて、window.b を開き直します。
この回答への補足
回答ありがとうございます。
今回はASP.NETを利用しているので(今思えば先に言うべき情報でしたね、すみません
HiddenFieldを利用して「Bが開いているか」を保持させることにしました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- UNIX・Linux ubuntu ウィンドウのバー ダブルクリック 巻き取る 1 2022/04/28 19:28
- Windows 10 2つのウィンドウ選択時の表示について 10 2023/07/25 08:48
- 英語 An evolution in surgical protocols has resulted in 4 2023/03/10 09:23
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Windows 10 プレビューウインドウに表示されたメッセージについて 1 2022/04/13 13:53
- Excel(エクセル) WPSスプレッドシートの起動オプションの設定は可能ですか? 1 2023/02/11 19:49
- その他(Microsoft Office) windows10で作業を終了する際の「保存しますか はい いいえ」を表示させずに自動で保存する方法 6 2023/03/15 11:29
- Word(ワード) Microsoft Word2023で、修正箇所を表示させたい 1 2023/02/09 10:07
- その他(ソフトウェア) IndesignのGPUは色?CMYKなの?RGBなの? 1 2022/05/09 19:13
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
子ウィンドウの存在確認
JavaScript
-
特定のウィンドウ名を持つウィンドウの有無を判別
JavaScript
-
JavaScript window.openで開く際、そのwindowの背景色を指定したい
JavaScript
-
-
4
同じページをブラウザで複数開けないように
JavaScript
-
5
ウィンドウの2重起動を防止したい
JavaScript
-
6
フォームで同じ複数のnameで違うvalueの送信
Java
-
7
[Java] Edgeでのアドレスバー非表示について
JavaScript
-
8
window.open(about:blank")"
JavaScript
-
9
親ウィンドウから開いた子ウィンドウをまとめて閉じるには?
JavaScript
-
10
ウィンドウ名の設定
JavaScript
-
11
sessionの値でボタンを活性・非活性(JSP)
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
子ウィンドウの存在確認
-
ポップアップと作業ウィンドウ...
-
同じURLのフォームが開いている...
-
サブウィンドウからメインウィ...
-
IEでのみ発生するJavaScriptエラー
-
1クリックでモーダルを開いてか...
-
ウィンドウの2重起動を防止したい
-
チェックボックス付きツリービュー
-
サブウィンドウの制御がうまく...
-
VBAで任意のウインドウのサイズ...
-
エクセルでファイルを最大化で...
-
response.redirect <<URL>> で...
-
リンク時、親ウインドウを最前...
-
フレームウィンドウを隠す(非...
-
Javascript 親から設定したaddE...
-
window.Openをモーダルにできま...
-
小さな別ウインドウを常に手前...
-
アクティブウィンドウのタイト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
VBの画面で、全ウィンドウを一...
-
ポップアップと作業ウィンドウ...
-
子ウィンドウから親ウィンドウ...
-
ウィンドウ名からウィンドウオ...
-
子→親ウインドウへデータを受け...
-
子ウィンドウの存在確認
-
子ウィンドウから親ウィンドウ...
-
window.openで新しいページを後...
-
親ウィンドウから開いた子ウィ...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
window.Openをモーダルにできま...
-
1クリックでモーダルを開いてか...
-
孫ウインドウを閉じたら親をリ...
-
子ウィンドウの「閉じる(×)」...
-
JavaScriptで指定Windowを最大...
-
助けてGmailでボタン表示が消え...
おすすめ情報