微软对上证所的固执是相当不可思议的,特别是实施它实际上只是一个超过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,或者类似的东西。)