3

ポップアップウィンドウがあり、そこから親ウィンドウをリロードしたいのですが、ページ全体ではなく特定のフレームです。

したがって、ユーザーがフレーム内からボタンをクリックすると、ポップアップが開きます。ポップアップから、特定のイベントに基づいて、親ウィンドウからフレームをリロードします。

これはIEで可能ですか?

2 つの iframe を含むページ index.php があります。

2 番目の iframe から、新しいポップアップ ウィンドウが開きます。

ユーザーがボタンをクリックするか、ポップアップ ウィンドウを閉じると、iframe#2 (ウィンドウを開いたもの) をリロードします。

これどうやってするの?

私が試してみました:

 opener.location.reload();
 opener.top.document.getElementById('myIFrameId').location.reload()
 opener.myIFrameId.location.reload();

何も機能していないようです。

4

5 に答える 5

2

あなたの場合、window.openerポップアップを開いたiframeのウィンドウオブジェクトなので、動作するopener.location.reload()はずです:デモ

デモソース:

于 2013-01-14T10:15:09.767 に答える
2

IE8 を含む最新のすべてのブラウザーで動作する優れたjQuery プラグインを見つけました。

パラメータを使用してセカンダリ ブラウザ ウィンドウを簡単に呼び出すことができ、動作と同様に、2 つの間でデータを渡すことができますpostMessage API

これらのデータ メッセージは、受信した jQuery データを分析すると、親ページにある元の iframe2 に新しいコンテンツまたは代替 Web ページを読み込むことができます。

記事: ブラウザー ウィンドウ間の通信用の jQuery プラグイン

オンライン デモ: 親ページ

プロジェクトのダウンロード: windowmsg.zip

ダウンロードしたファイルはデスクトップから直接動作しますが、jsFiddleでは許可されていないため異なります。


セカンダリ ブラウザー ウィンドウが必要なく、フローティング iframe の使用が許容される場合にうまく機能するさらに別のソリューションです。Shadowbox-jsなどの iframe 対応のライトボックス クローンを使用するだけです。

この方法の利点は、必要なイベントをトリガーしない独自のブラウザーの閉じるボタンを持つ上記のセカンダリ ブラウザー ウィンドウとは異なり、iframe を閉じる方法を完全に制御できることです。

ライトボックス クローン クロージャ イベント中のコールバックは、必要に応じて親ページの iframe 2 のコンテンツを変更することができます。また、ライトボックスを iframe 2 内にバインドする (ライトボックス クローンを iframe ページにインストールする) か、フルスクリーンにする (ライトボックス クローンを親ページにインストールする) かを選択できます。

于 2013-01-08T05:56:42.257 に答える
0

エラー「エラー:プロパティ'reload'へのアクセスが拒否されました」と表示されます

それはおそらく「同一生成元ポリシー」の問題です。

または、iframe上にdivラッパーを作成し、iframeを再生成します

于 2013-01-10T08:40:56.187 に答える
0

私はここでこの機能を再構築しました:http: //jsfiddle.net/JBWTn/3/

ポップアップのボタンをクリックすると、元のウィンドウのフレームの境界線の外観が変更されます。ここで重要なのは、を使用して元のウィンドウのフレームをナビゲートすることです。

window.opener.document.getElementById('[ID_OF_YOUR_FRAME]')

(Frank van Puffelenが提案したものと非常に似ています)

スタイルを変更するだけでなく、フレームをリロードするには、次を使用します。

window.opener.document.getElementById('[ID_OF_YOUR_FRAME]').location.reload()

...あなたがすでにあなたの質問で試したように。

この質問は、phpMyAdminの機能(ポップアップウィンドウからSQLクエリを実行し、結果をメインウィンドウに表示できる)を思い出させたので、簡単に調べました;)

于 2013-01-07T23:48:43.473 に答える
0

やってみました:

opener.frames["myIFrameId"].location.reload();
于 2013-01-10T08:06:11.433 に答える