微軟對上證所的固執是相當不可思議的,特別是實施它實際上只是一個超過XMLHttpRequest2
的層次,標準很短,有一個美妙的O'Reilly出版了3年的書,至少有至少兩個開源實現從中獲得靈感。
無論如何,推薦技術來獲得兼容性回IE8是創建一個隱藏的iframe,然後不斷輪詢其內在根源,只是返回任何東西是新的有:
iframe = document.createElement("iframe");
iframe.setAttribute("style", "display: none;");
iframe.setAttribute("src", "abc_stream.php");
document.body.appendChild(iframe);
如果你只需要支持回IE10,你可以使用一個XMLHttpRequest2
對象,並聽取了readyState==3
消息:
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);
這些技術需要在後端只有很輕微的支持:如果客戶端與真正的SSE連接,你哈已經將MIME類型設置爲text/event-stream
,但是如果使用xhr黑客,則必須將其設置爲text/plain
。如上所示(我們將它的xhr=1
附加到URL上,並將時間戳記停止緩存)。
如果您確實想要獲得單一解決方案,則xhr技術將適用於SSE工作的所有瀏覽器。它的一個缺點是發送的全部數據正在建立在內存中。 (我的建議是自動重連每當responseText
超過64KB,或者類似的東西。)