タブまたはウィンドウ間の通信 質問する

タブまたはウィンドウ間の通信 質問する

私はブラウザ内の複数のタブやウィンドウ(同じドメインではなく)間で通信する方法を探していました。CORS) を痕跡を残さずに削除する方法がいくつかあります。解決策はいくつかあります。

  1. ウィンドウオブジェクトを使用する
  2. 投稿メッセージ
  3. クッキー
  4. ローカルストレージ

最初の方法はおそらく最悪の解決策です。現在のウィンドウから別のウィンドウを開く必要があり、そのウィンドウを開いている間だけ通信できます。いずれかのウィンドウでページを再読み込みすると、通信が失われる可能性が高くなります。

postMessage を使用する 2 番目のアプローチでは、おそらくクロスオリジン通信が可能になりますが、最初のアプローチと同じ問題が発生します。ウィンドウ オブジェクトを維持する必要があります。

3 番目の方法は、クッキーを使用して、ブラウザにデータを保存します。これは、同じドメインのすべてのウィンドウにメッセージを送信しているように見えますが、問題は、クリーンアップする前にすべてのタブが「メッセージ」をすでに読み取ったかどうかを知ることができないことです。クッキーを定期的に読み取るには、何らかのタイムアウトを実装する必要があります。さらに、クッキーの最大長は 4 KB に制限されます。

4 番目の解決策は、localStorage を使用することで、Cookie の制限を克服し、イベントを使用してリッスンすることもできます。使用方法は、承認された回答に記載されています。

ベストアンサー1

この目的専用の最新のAPIがあります -放送チャンネル

それは次のように簡単です:

var bc = new BroadcastChannel('test_channel');

bc.postMessage('This is a test message.'); /* send */

bc.onmessage = function (ev) { console.log(ev); } /* receive */

チャネルに送信されたデータは、構造化クローン アルゴリズムを使用してシリアル化されます。つまり、自分でシリアル化することなく、さまざまなデータ オブジェクトを安全に送信できます。

それはサポートされているすべての主要ブラウザで利用可能ですが、ポリフィルlocalStorage を使用します。

おすすめ記事