2

別のブラウザウィンドウで取得したイベントを発生させることはできますか?おそらくjavascriptで。

つまり、私のWebサイトが別のウィンドウを開いて製品の概要情報を表示した場合、メインウィンドウで別の製品が選択されたときに、そのウィンドウに更新を通知することはできますか?

IEで動作する必要がありますが、Chromeやその他のブラウザで動作する必要はありません。

4

3 に答える 3

4

次のようなコードを使用します。

親ウィンドウ

var func = function() {...}
child = window.open(...)

子ウィンドウ

window.opener.func(); // Call function in parent window

親から子ウィンドウで関数を呼び出すこともできますが、問題が1つあります。子ウィンドウの読み込みが完了するまで待つ必要があります。window.open()非同期です。

詳細:JavaScriptを使用して子ウィンドウから親ウィンドウにアクセスする、またはその逆にアクセスする

于 2012-07-11T09:22:03.510 に答える
3

いくつのオプションがあります。

  1. Cross-Document-Messagingを使用すると、ウィンドウ間でイベントを渡すことができます。これを機能させるには、ターゲットウィンドウのハンドルが必要です。これは、ターゲットが<iframe>(たとえばwindow.frames、またはwindow.parentiframeのPOVから)である場合、またはターゲットが現在のウィンドウによって開かれたウィンドウである場合にのみ取得できます。ポップアップのPOVを介してwindow.open()またはそこから。window.opener
  2. 共有ワーカーは、クロスドキュメントメッセージングのように、関連付けられていないウィンドウに接続できます。ただし、共有ワーカーはChromeとSafariでのみ使用できます。
  3. サーバー送信イベントは、サーバーを使用して、関連付けられていないウィンドウ間の通信をプロキシする可能性があります。これにはサーバーへのラウンドトリップが必要であり(したがって、完全にクライアントベースではありません)、InternetExplorerでは使用できません
  4. Webソケットもオプションです。それらもサーバーのラウンドトリップに悩まされており、InternetExplorerでは使用できません。この機能を古いInternetExplorerまでポリフィルするsocket.ioがあります。したがって、実行可能なソリューションになる可能性があります
  5. ハッキーなソリューションはLocalStorageを悪用しています。最新のブラウザとIE8で動作します。
  6. jQuery BrowserEventは、昔私が遊んだものでした。window.eventとブラウザのローカルストレージ機能を悪用して、ブラウザ間でのイベントの受け渡しをシミュレートします。ただし、これは実稼働環境で使用したいものではありません。

ドイツのフェローは、Kommunikations-HTML5のAPI-Welche wann nutzenをチェックしたいかもしれませんか?

于 2012-07-11T09:28:16.660 に答える
0

そうです、親ウィンドウでwindow.openメソッドを使用して、製品情報のあるウィンドウを開くと、それが可能になります。

そうすれば、これら2つの間の通信を(厳密に言えば、イベントなしで)誘導できますが、可能な追加のコードを使用します。

于 2012-07-11T08:47:31.700 に答える