2017-02-16 5 views
2

Can I use?によれば、MS IE &エッジブラウザーはServer-sent Eventsをサポートしません。クロスブラウザーサーバー送信イベント、またはMicrosoftブラウザーを含む代替手段

回避策はありますか?

また、完全にクロスブラウザの代替手段は簡単です(websocketsとは思われません(とにかく、私はHTTPに固執し、複数の同時プロトコルでは複雑なことはしません))?

AngularJsクライアントを購読できるようにしたい& unsubscribe PHPサーバーはJSONデータをプッシュしました。複数のクライアントが同じデータを購読でき、プッシュに必要なサーバーアクションは1つだけです。押して。

答えて

4

SSEに対するマイクロソフトの頑固さは、特に実装がXMLHttpRequest2の単なるレイヤーであるため、標準が短く、3年間にわたって素晴らしいO'Reillyの本がありました。インスピレーションを得るための2つのオープンソース実装

とにかく、バックIE8への互換性を得るために推奨される手法は、非表示のiframeを作成し、その内側のソースポーリングを維持することであり、そこに新しいものは何も返す:あなただけが必要な場合

iframe = document.createElement("iframe"); 
iframe.setAttribute("style", "display: none;"); 
iframe.setAttribute("src", "abc_stream.php"); 
document.body.appendChild(iframe); 

をあなたは、クライアントが実際のSSEと接続されている場合:これらの技術は、バックエンドでのごくわずかな支援を必要と

xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function(){ 
    //Read this.responseText from the previous offset onwards 
    }; 
var u = url; 
u += "xhr=1&t=" + (new Date().getTime()); 
xhr.open("GET", u); 

:バックIE10にサポートするために、あなたはXMLHttpRequest2オブジェクトを使用し、readyState==3メッセージを聞くことができますハMIMEタイプをtext/event-streamに設定してください。ただし、xhrハックを使用する場合は、text/plainと設定する必要があります。上記のようにURLにxhr=1を追加します(キャッシュされないようにするタイムスタンプ)。

xhrのテクニックは、単一のソリューションを使いたい場合は、SSEが動作するすべてのブラウザで機能します。 1つの欠点は、送信される全データがメモリに蓄積されていることです。 (responseTextが64キロバイト、またはそのような何かの上にある時はいつでも私の提案は、自動再接続にある。)

2

MSIEのためのEventSourceのpolyfillsのカップルがあります。

https://github.com/remy/polyfills/blob/master/EventSource.js

https://github.com/amvtek/EventSource

一つは、 (覚えていない)迷惑なアラートメッセージが定期的に表示されるので、おそらくコードを編集して削除する必要があります。

https://github.com/mariomac/jeasse/blob/master/examples/chat-servlet3/src/main/resources/static/index.html

あなたはここでの使用例を見つけることができます