7

window.open("newtab.html")メソッドで JavaScript を使用して、同じドメインで新しいタブを開くHTML ページ (ファイルmain.html ) があります。

新しいタブで、ユーザーはボタンをクリックしてアクティビティを終了します。この時点で、オープナー ウィンドウにメッセージを送信したいと思います。postMessage を試してみましたが、新しいタブからオープナーへの参照ができません。

新しいタブから、次のようなものが欲しいのですが、「ko」

var w = window.opener;
if (w) {
    w.postMessage("hi", "http://10.150.10.43");
} else {
    alert("ko");
}

セカンダリ タブ/ウィンドウからメイン タブ/ウィンドウ (同じドメイン内) にメッセージを送信する最良の方法は何ですか?

4

1 に答える 1

15

それ、変だよ。で新しいウィンドウを開くとwindow.open("newtab.html")、新しく開いたウィンドウがを介してオープナーを参照できるようになりますwindow.opener

とにかく、同じドメイン上の2つのウィンドウ間で通信するための他のいくつかのオプションがあります。次の2つを実装するのが最も簡単だと思います。

  1. localStorageを使用します。新しいタブウィンドウのlocalStorageにいくつかのキーの下でデータを保存すると、オープナーウィンドウはストレージイベントを取得します。ハンドラーでイベントをキャッチすると、新しいタブウィンドウから書き込んだlocalStorageからデータを読み取ることができます。イベントは、両方のページが同じドメインにあり、実際に問題のウィンドウが2つある場合にのみ発生することに注意してください(データを書き込んだ同じウィンドウ内でイベントは発生しません)。これを行う方法の詳細については、たとえば、http://diveintohtml5.info/storage.htmlを参照してください。

  2. 共有Webワーカーを使用します。Webワーカーは、別のスレッドのバックグラウンドで実行されるJSスクリプトです。共有Webワーカーは、任意の数の親ドキュメントが1つのワーカーと通信できるようにする特殊なタイプのWebワーカーです。したがって、ワーカーを使用して、オープナーウィンドウと新しいタブウィンドウの間でメッセージを中継できます。ワーカーと通信するためのAPIは、postMessageAPIと非常によく似ています。これを行う方法の詳細については、たとえばhttp://www.sitepoint.com/javascript-shared-web-workers-html5/を参照してください。

于 2012-09-16T19:24:40.713 に答える