L'entêtement de Microsoft par rapport à SSE est assez incroyable, d'autant plus que sa mise en œuvre est juste une couche sur XMLHttpRequest2
, la norme est courte, il y a eu un merveilleux livre O'Reilly à ce sujet depuis 3 ans, et il y a au moins deux implémentations open source pour s'inspirer.
Quoi qu'il en soit, la technique recommandée pour obtenir la compatibilité de retour à IE8 est de créer une iframe cachée, puis garder polling sa source intérieure, et il suffit de retourner tout ce qui est nouveau là:
iframe = document.createElement("iframe");
iframe.setAttribute("style", "display: none;");
iframe.setAttribute("src", "abc_stream.php");
document.body.appendChild(iframe);
Si vous avez seulement besoin pour soutenir revenir à IE10, vous pouvez utiliser un objet XMLHttpRequest2
, et d'écouter les readyState==3
messages:
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);
Ces techniques ont besoin que très peu de soutien à l'arrière-plan: si un client se connecte avec un réel ESS, vous Ha Pour définir le type MIME comme text/event-stream
, mais si vous utilisez le hack xhr, vous devez le définir comme text/plain
. Je l'ai ajouter xhr=1
à l'URL, comme indiqué ci-dessus (et l'horodatage pour l'empêcher d'être mis en cache).
La technique xhr fonctionnera sur tous les navigateurs où SSE fonctionne, si vous vouliez opter pour une solution unique. C'est un inconvénient, c'est que les données complètes envoyées sont en train de s'accumuler en mémoire. (Ma suggestion est de reconnexion automatique chaque fois que le responseText
est plus 64Ko, ou quelque chose comme ça.)