Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is cross-origin postMessage broken in IE10?

I'm trying to make a trivial postMessage example work...

  • in IE10
  • between windows/tabs (vs. iframes)
  • across origins

Remove any one of these conditions, and things work fine :-)

But as far as I can tell, between-window postMessage only appears to work in IE10 when both windows share an origin. (Well, in fact -- and weirdly -- the behavior is slightly more permissive than that: two different origins that share a host seem to work, too).

Is this a documented bug? Any workarounds or other advice?

(Note: This question touches on the issues, but its answer is about IE8 and IE9 -- not 10)


More details + example...

launcher page demo

<!DOCTYPE html> <html>   <script>     window.addEventListener("message", function(e){       console.log("Received message: ", e);     }, false);   </script>   <button onclick="window.open('http://jsbin.com/ameguj/1');">     Open new window   </button> </html> 

launched page demo

<!DOCTYPE html> <html>   <script>     window.opener.postMessage("Ahoy!", "*");   </script> </html> 

This works at: http://jsbin.com/ahuzir/1 -- because both pages are hosted at the same origin (jsbin.com). But move the second page anywhere else, and it fails in IE10.

like image 240
Bosh Avatar asked Apr 26 '13 00:04

Bosh


1 Answers

I was mistaken when I originally posted this answer: it doesn't actually work in IE10. Apparently people have found this useful for other reasons so I'm leaving it up for posterity. Original answer below:


Worth noting: the link in that answer you linked to states that postMessage isn't cross origin for separate windows in IE8 and IE9 -- however, it was also written in 2009, before IE10 came around. So I wouldn't take that as an indication that it's fixed in IE10.

As for postMessage itself, http://caniuse.com/#feat=x-doc-messaging notably indicates that it's still broken in IE10, which seems to match up with your demo. The caniuse page links to this article, which contains a very relevant quote:

Internet Explorer 8+ partially supports cross-document messaging: it currently works with iframes, but not new windows. Internet Explorer 10, however, will support MessageChannel. Firefox currently supports cross-document messaging, but not MessageChannel.

So your best bet is probably to have a MessageChannel based codepath, and fallback to postMessage if that doesn't exist. It won't get you IE8/IE9 support, but at least it'll work with IE10.

Docs on MessageChannel: http://msdn.microsoft.com/en-us/library/windows/apps/hh441303.aspx

like image 58
ShZ Avatar answered Sep 21 '22 13:09

ShZ