Tuesday, June 6th, 2006p>In a recent post, I explain the difficulties of Comet (Streaming/Push) in IE.
IE makes it difficult for two reasons: (a) IE’s XMLHttpRequest component doesn’t tell you anything about the response until the connection has closed – even if you try polling it instead of relying on onReadyStateChange, you’ll still get an empty string (Try it); (B) Okay, switch to plan B and inspect IFrame content – we can’t rely on onload, which is only called once at the end, so we *must* poll. But no, polling won’t help either, as the IFrame content remains empty until (you guessed it) the connection is closed. (Try it).
Fortunately, there *is* a portable solution, demonstrated here.
The portable solution is this: Have the server continuously output script tags that call a known function in the parent frame. When you set the child IFrame’s source to point to this service, it will start evaluating the inline scripts as they pop out of the server.
Of course, none of this is really new, at least not to some people. Ajax pioneer Brent Ashley points out:
The ReadyState 3 issue that Michael talks about has been well known (well, apparently not well known) at least since Scott Andrew LePera described the problem in late 2002. It really needs to be fixed.
Hopefully, future versions of IE will expose the ongoing response while the XHR connection is still open. But until then, we at least have a workable technique that works across different browsers.
This area isn’t very well-documented; It would be good to hear what others have done to make streaming portable.
Posted by Michael Mahemoff at 4:33 pm