peknet :: an eddy in the bit stream         
about peknet
peknet is Peter E Karman musing on technology, politics, religion, books, beer and parenthood.

navigate

credits

Brighter Planet's 350 Challenge

St Paul Minnesota Yellow Pages

Powered by Swish-e

Valid CSS!

proud member of the
Open Source Community

© 2005 peknet dot com

syndicate this site

IE7 "native" XMLHttpRequest breaks with base tag different than URL

I had to hack the new prototype.js 1.5.0 release to revert to the 1.4 getTransport() order. The problem: IE7's "native" XMLHttpRequest method won't play nice with a <base> tag whose domain value is different than the domain value of the page's URL.

Example:
url: 
    http://flop.net/bar.html
with:
    <base href="http://foo.com/" />
then IE7 new XMLHttpRequest() for 
    'http://flop.net/ajax' 
throws access denied error.
However, this works:
url:
    http://flop.net/bar.html
with:
    <base href="http://flop.net/">
then IE7 new XMLHttpRequest() for
     'http://flop.net/ajax'
So we just revert to using ActiveX (the original Microsoft version for remote transport).

I see that YUI checks for transport the same way. So I expect their's will break with IE7 too.

Here's the diff:
 var Ajax = {
   getTransport: function() {
     return Try.these(
-      function() {return new XMLHttpRequest()},
       function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
+      function() {return new XMLHttpRequest()}
     ) || false;
   },


I assume Microsoft changed this behaviour in IE7 in the name of security, but it is still a royal PITA.

Did I just miss the warning signs?

I don't really see how this 'security' precaution actually makes anything more secure. If anything, in my case, not using the 'base' tag means my HTML would be lots more verbose, since I would need to specify the URL in every href link.

File under general/ Sat Jan 27 23:23:55 CT 2007


Past entries: 2004 . 2005 . 2006 . 2007 . 2008 . 2009 . 2010 . 2011 . 2012 .