![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
以下の操作をした際に親ウインドウの情報を取得できず困っています。
1.親ウインドウでサブウインドウを開く
2.サブウインドウのボタン押下で親ウインドウのlocationを変更する
3.サブウインドウから「window.opener」を使おうとすると、object自体は存在するがnameやdocumentが取得できない
サブウインドウが開いている間に親ウインドウを変更するとopenerは情報を失うのでしょうか?
やりたいことはサブウインドウから親ウインドウのアドレスを変更し、hiddenに値をセットしたいのですが、対応策はありますでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
隠しフレームを用意します。
親ウインドウを開く際、隠しフレームのjavascriptから開くようにします。
子ウインドウも開く際、隠しフレームのjavascriptから開くようにします。
子から親ウインドウを更新する場合は、隠しフレームのjavascriptで更新をかけます。
また、hiddenに値を入れる際にも隠しフレームのjavascriptで、、。
こんな感じでやれば、出来ると思います。
ちなみに隠しフレームって、0ピクセルのフレームの事です。
この回答への補足
回答ありがとうございます。
元々親ウインドウはフレーム分割されていて(Aフレーム、Bフレーム)、
Aフレーム上のボタン押下でBフレームに定義したjavascriptを呼び出したのですがうまくいきませんでした。
opener.nameを表示したところ「Aフレーム」となってしまうことから、
javascriptの定義している場所ではなく、アクションを起こしたフレームがopenerとなるようです。
何か良い方法はないでしょうか?
No.6
- 回答日時:
すいません。
No5の件無視してください。
こちらのまったくの勘違いです。(==;
いま、テストして、何を問題にしているか分かりました。
window.opener.parent.location = "http://yahoo.co.jp/";
とやらずに
window.open("http://yahoo.co.jp/", "right","");
こんな記述で書いてください
ううう、No5消したいよお、(T-T;
たびたびの回答ありがとうございました。
おかげさまで問題は解決しました。
openerが無効になる原因は、サブウインドウでopener.parent.locationを変更したことにより
opener自体を操作できなくなるためだったようです。
(親オブジェクトを変えると子オブジェクトにアクセスできないため?)
No.1でアドバイスしていただいた「隠しフレームのjavascriptからサブウインドウを開く方法」
に少し手を加えたらうまくいきました。
No.5
- 回答日時:
説明が足りなかったみたいですね(--;
その原因は、セキュリティによるものです。
No2のサイトにも書いていますが。
>window.openプロパティで開いたウインドウでリンクなどで別のリソースを表示させた後に
>window.openerオブジェクトを使おうとするとセキュリティエラーが生じます。
>window.openで開いたウインドウでwindow.openerを利用する場合は、
>そのウインドウでリンクなどを利用しないで下さい。
具体的にはNo4の
opener.parent.location = "http://yahoo.co.jp/";
この行以降から、openerは無効になります。
理由は簡単です。
これを許してしまうと
opener.parent.location = "どっかのアタックしたい、ショッピングサイトA";
opener.parent.xx = (...でアクセス可能な場合)
以降、自分側のhtml書き換えれば、
サイトAのセッション情報、クッキー情報読み放題、書き換え放題(-▽-
Submit、スクリプト動かし放題。(-▽-♪
うまくいきゃあ、他人のユーザで買い物し放題(=▽=♪♪♪
のような事になってしまいます。
ついでに書いときますが、
openerは他にも、
「親とサイトが違う場合はアクセス不可」
って制約があります。
で、No1から言っている、
隠しフレームとは、
「すべての画面の親であり」、
「子画面からURLを書き換える事の無い画面」
が最低条件になります。
No.4
- 回答日時:
No3の書き込み、読み直すと、ちとキツイ書き方してますね、、。
すいません。ちと、忙しくなっちゃたんで(=w=;
(忙しいのにカキコしてる事は、突っ込まないでね、)
この回答への補足
お忙しいのにありがとうございます。
簡略化したソースを載せます。(分かりやすくするため、質問の内容とは若干異なりますがご容赦ください)
親ウインドウ
+フレーム名:top
└フレーム名:under
サブウインドウ
+ボタン1:testScript(1)
└ボタン2:testScript(2)
function testScript(argKbn) {
if(argKbn == 1)
opener.parent.location = "http://yahoo.co.jp/";
if(argKbn == 2)
opener.parent.location = "http://www.vector.co.jp/";
}
サブウインドウにある2つのボタンを順番に押すと、1つめはurlが変わるのですが、2つめではurlが変わりません。
ロードはしているようなのですが・・・。
No.3
- 回答日時:
>元々親ウインドウはフレーム分割されていて(Aフレーム、Bフレーム)、
>Aフレーム上のボタン押下でBフレームに定義したjavascriptを呼び出したのですがうまくいきませんでした。
>opener.nameを表示したところ「Aフレーム」となってしまうことから、
>javascriptの定義している場所ではなく、アクションを起こしたフレームがopenerとなるようです。
一応、確認ですが、Aフレームは、Bフレームの処理でopenしたものでしょうか?
そうしなければ、Aフレームのopenerは、Bにならないので、。
後、別にopener使わなくても、別フレームにアクセス可能のはずですが。
こんな感じで
http://www.openspc2.org/kouza_js/082/
この回答への補足
Aフレーム、Bフレームともに親ウインドウの分割されたフレームです。
「openしたもの」は質問の中ではサブウインドウと呼んでいます。
No.2
- 回答日時:
書き忘れていましたが、
その現象はセキュリティのためのブラウザ仕様です。
一番下の注意事項。読んでください。
http://www.marguerite-site.com/Nihongo/HowToMake …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- Illustrator(イラストレーター) ウインドウの固定 1 2022/05/02 17:11
- Chrome(クローム) 最近Win10にてブラウザが左にスッと隠れていく現象に悩まされてます 3 2023/07/22 23:11
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- その他(OS) MacのFinder操作について 2 2022/07/13 07:29
- Chrome(クローム) Google Chromeのブラウザ(PC)ウインドウの移動について 3 2022/07/19 15:14
- Windows 10 J-WORD って 何ですか 1 2022/12/16 08:10
- Excel(エクセル) ウインドウ枠とスクロール 2 2022/06/11 21:17
- その他(プログラミング・Web制作) VSCodeの自動保存の2か所を無効にしているのに自動で保存されてしまう 1 2022/10/19 11:31
- ノートパソコン asusのパソコンを開らいたら セーフモードになってしまった。 通常ウインドウに戻す方法は? 3 2022/04/13 03:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フレーム分割表示について
-
チェックボックスのチェックを...
-
HTMLフォームボタンによるター...
-
別フレームの中にあるインライ...
-
インラインフレームで表示され...
-
<a href="#" …>の意味を教えて...
-
onLoadをbodyタグ以外で使用する
-
bodyにidをつける理由は何ですか?
-
HTMLタグでマウスポインタを変...
-
javascriptとApacheの設定
-
Dreamweaver で 外部JSを読み込...
-
JavaScriptでiframeの内容を「...
-
テキストボックス内にハイパー...
-
DreamWeaverでJS
-
1から100までの平方根を表示す...
-
ひとつの外部ファイルに複数の...
-
変数の代入値を外部の.txtファ...
-
別ファイルのfunctionの読み込み方
-
【Google Apps Script】「ライ...
-
Smarty(tplファイル)でJavaScri...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
インラインフレームで表示され...
-
インラインフレームをドラッグ...
-
HTMLでサブフレームから親のス...
-
フレームを跨ぐドロップダウン...
-
jqueryを利用してインラインフ...
-
別ページのインラインフレーム...
-
親ウィンドウの別フレームを子...
-
openerは使えないのでしょうか?
-
フレーム内のiframeのデータの...
-
フレームで隠れるポップ
-
ブラウザのURLアドレス文字表記...
-
フレーム分割領域のサイズを変...
-
エラー:書き込みができません ...
-
別フレームのページが読み込み...
-
フレームのあるHPでプルダウン...
-
HTMLフォームボタンによるター...
-
JavaScriptでできない事がある...
-
複数のページ(html)のvalueを...
-
Javaでテトリスを作っています。
おすすめ情報