0

タイトルが難しいですね、すみません。

問題は次のとおりです。最近の Web ブラウザではポップアップ ウィンドウが無効になっているため、回避策が必要です。

訪問者が Web サイトにアクセスすると、ボタンを押すよう促されます。ボタンが押されると、ポップアップ ウィンドウが起動し、次のコードが表示されます。

w = window.open('/audio/audioplayer.php?id='+audioId, 'audioplayer', params);

ポップアップが開いたので、訪問者が他のページを表示したときに、そのページに基づいた特定の情報がポップアップに読み込まれるようにしたいと思います。

これが可能かどうか、またはこれを行う方法がわかりません(ポップアップウィンドウが開いているかどうか、情報が読み込まれているかどうか、ボタンが再表示されていないかどうかを確認してください)

4

2 に答える 2

0

window.openwindowObjectReference を返します - これがポップアップ ウィンドウと対話できる唯一の方法です。windowObjectReference.closed特に、そのウィンドウが属性で閉じられているかどうかを知ることができます。また、ポップアップ ウィンドウにはwindow.opener、親ウィンドウを参照する属性があります。両方を使用して通信できます。

ただし、ページの読み込み間でこの通信を維持したいようです。いくつかのオプションがあります:

  • ウィンドウ間のリンクをできるだけ長く維持するようにしてください。問題は、親ウィンドウがリロードされると、すべての JavaScript 変数がリセットされ、ポップアップへの参照を回復する方法がないことwindow.openerです。このリンクは、このアプローチと、フレームを使用した別のアプローチを示しています。
    あなたはそれを醜いまたは賢いと考えることができます. しかし、それは完璧ではありません。(ユーザーが新しいリンクでページを開いた場合は何もできません)
  • メイン ページとポップアップ ページの両方から ajax を使用してサーバーと通信します。トップレベルのページがポップアップにメッセージを送信したい場合、サーバーに対して XMLHttpRequest を開始し、メッセージを「キュー」に残すスクリプトに通知します。ポップアップページは定期的に XHR (またはサーバー送信イベント、私の個人的なお気に入り) を使用してサーバーを定期的にポーリング/ロングポーリングし、それに応じて独自のコンテンツを更新します。
    これは、あなたが望むよりも少し複雑で高価かもしれませんが、最も安全な解決策でもあります.
  • 他の回答が示唆するように、ポップアップを使用しないでください。div を使用position: fixedすると同様の結果が得られ、ウィンドウ間の通信方法から解放される可能性がありますが、ページごとに 1 つのダイアログが存在することにもつながるため、ダイアログの別のインスタンスが実行されているかどうかをサーバーに問い合わせる必要があります。これに対して他の同期方法が実行可能かどうかはよくわかりません (localstorage?)
于 2013-04-07T19:56:42.397 に答える
0

ポップアップが開いているかどうかを検出することはできないと思います。

ダイアログの使用について考えたことはありますか? ポップアップではなく?

于 2013-04-07T19:21:58.663 に答える