
対象ブラウザは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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
VBの画面で、全ウィンドウを一...
-
ウィンドウの2重起動を防止したい
-
デスクトップ画面を4分割するには
-
IEでのみ発生するJavaScriptエラー
-
子ウィンドウから親ウィンドウ...
-
ポップアップと作業ウィンドウ...
-
メニューバーを消す方法
-
親ウィンドウの切り替え方法
-
ウィンドウ名からウィンドウオ...
-
親ウィンドウのメッセージを子...
-
タスクバーに非表示
-
子ウィンドウの存在確認
-
Fireworks4でポップアップを作...
-
子ウィンドウより親ウィンドウ...
-
VBAで任意のウインドウのサイズ...
-
外部JSファイルでポップアップ...
-
1クリックでモーダルを開いてか...
-
子→親ウインドウへデータを受け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
デスクトップ画面を4分割するには
-
VBの画面で、全ウィンドウを一...
-
ウィンドウの2重起動を防止したい
-
VBAで任意のウインドウのサイズ...
-
javascriptで開いたウィンドウ...
-
1クリックでモーダルを開いてか...
-
ポップアップと作業ウィンドウ...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウィンドウ名からウィンドウオ...
-
子ウィンドウの存在確認
-
子ウィンドウより親ウィンドウ...
-
googleサイトにfacebookのいい...
-
子ウィンドウから親ウィンドウ...
-
初心者javascript グーグルクロ...
-
リンク時、親ウインドウを最前...
-
子ウィンドウから親ウィンドウ...
-
JavaScriptで指定Windowを最大...
-
親ウィンドウから開いた子ウィ...
おすすめ情報