新しいブラウザの複数のブラウザタブとクライアント状態に対処するオープンソースのJavaScriptライブラリはありますか?[閉まっている]


11

タブ、ブラウザウィンドウ、同じドメインウィンドウなどの間で状態を共有できる最近のブラウザになったHTML5の新しい機能がいくつかあります。したがって、おそらく、クライアントおよびタブやウィンドウ間で状態をインテリジェントに管理します。

現在、単一のタブまたは単一のウィンドウで状態を管理するのに役立つBackbone.jsのようなライブラリがあります。複数のタブ(またはウィンドウ)がグローバルな状態、タブ固有の状態、およびクロスタブイベントを管理するのに役立つものはまだありますか?


2
一部のWebアプリ(Trelloなど)は、同じブラウザー内であるかどうかに関係なく、WebSocketを使用してすべてのクライアントを同期することでこれをバイパスしています。しかし、それは役に立つかもしれません。このようなライブラリを作成している場合、SharedWorkersはここで必要な多くのことを行いますが、まだ十分にサポートされていないため、SharedWorkersのポリフィル上に薄いレイヤーを作成します。これを機能させるためのハックはlocalStorageイベントで、タブが個別に開かれた場合でも発生します。
-mahemoff

1
大学の先生が教えてくれましたHTTP is great (and beutiful) because it is stateless。私は業界に入社して以来、その美しさを探していますが、それを見つけることができません。誰もがあなたが見る状態を維持することについてのみ語っています!
ディパンメタ

@DipanMehta:RFC2616を見ると、「美しさ」の部分について先生に同意するかどうかわかりません:)「純粋にステートレスな」アイデアは本当に素晴らしいと私はあなたに伝えますが、私は問題があると思います私たちはそれを
屠っ

ステートレスアプリケーションとWebアプリケーションはうまく連携しません。キャリー状態でログインするなどの小さなこと。かなり小さいファイルを要求する人に提供するだけなら素晴らしいと思います。
psr

HTML5トリックを使用して、Webサイトの開いているすべてのタブ間で通信する小さなライブラリを作成しました。
カタフェタミン

回答:


3

短い答え:

あるタブから別のタブに状態情報を本当に渡すことはできません...

長い答え:

これはサンドボックス化とセキュリティの非常に重大な違反となるため、あるタブから別のタブに状態情報を本当に渡すことはできません

ただし、次の方法で2つのタブ間で間接的に状態を渡すことができます。

別のオプションは、単に2つのタブの間で情報を渡すためにクッキーを介して通信するだろうが、これは最も可能性の高い原因の問題は、非常にブラウザに依存することとページのリロードが必要になる、(とあることを正直私は1つことを試したことがありませんし、それを考えましたしかし、他の人がそれやっ

したがって、ブラウザ拡張機能は明らかにかなり制限されたパスであるため、クライアントとサーバー間の通信を行い、クライアントがサーバーにイベントを発行できるシステムを開発し、イベントを再送信(または他の種類のブロードキャスト)する必要があります選択した通信プロトコルを介して他のクライアントに。


更新1: コメントを削除する前に誰かが言及したように(受信トレイに表示されないため、クレジットを与えることはできません、申し訳ありません)

HTML5はwindow.postMessageAPIを導入します。

実際の例については、クロスウィンドウメッセージングに関するJohn Resigのブログ投稿を参照してください。非常に興味深いことに、この投稿のコメントを見ると、Malteと呼ばれる人が、最新のブラウザーで使用するために作成したライブラリーwindow.postMessage、または古いブラウザーでのCookieベースのバージョンに言及していることがわかります。

詳細と例については、これらをお読みください。

アップデート2:

2012-03-04として、HTML5仕様はまだドラフトであるため、一部の機能が削除される可能性があることに注意してください。だから、注意して使用して ...


実際、HTML5にはwindow.postMessage APIが導入されているため、明らかに間違っています。
ヘイレム

また、Cross-Window Messagingに関するJohn Resigのブログ投稿とコメントを読むと、Malteという名前の誰かが[ライブラリ] [3]に言及していることに気付くでしょう。古いブラウザなので、私のcookieのことはそれほどクレイジーではありませんでした。
ヘイレム

3

最近、ローカルストレージを使用してウィンドウ間でブロードキャストメッセージングを実装するIntercomを発見しました。ローカルストレージは、onstorageデータが変更されるとイベント()を発生させるため、ポーリングは不要です。インターコムでは、ドメイン上のすべてのページが、どのように開かれたかに関係なく通信できます。


1

ウィンドウ(ページ)が同じドメイン(オリジン)からのものである場合、localStorageデータの共有とメッセージのブロードキャストに使用できます。考慮すべきことの1つは、各ブラウザーウィンドウ(ページ)が個別のスレッドで動作することです。したがって、クロスウィンドウコミュニケーションについて話している場合は、マルチスレッドについても話します。

localStorageIEに関するいくつかの問題も考慮する必要があります。

  • IE8でlocalStorageのテストをいくつか実行しました。localStorageに数千の変更を加えた後、同じオリジンからのウィンドウは「ストレージ」イベントの受信を停止します。さらに、同じlocalStorageアイテムから読み取ろうとすると、異なるウィンドウで値が異なる場合があります。だから、IE8はlocalStorageをサポートしていないと思います

  • IE9とIE10は、localStorageがこのウィンドウから変更された場合でも「storage」イベントハンドラーを呼び出します(これは仕様に反します)。

  • IE11に既知の問題もあります。

最近、ウィンドウ間通信ライブラリを公開しました(すべての機能はreadmeで説明されています)。スレッドセーフなデータ共有、イベントブロードキャストを提供します。また、いくつかのIEの問題も解決します(IE8は完全にサポートされていません。異なるオリジンの親内にiframeがあるIE11のバグは、IEの修正によってのみ解決できます-IE11の更新を待っています)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.