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
peknet is Peter E Karman
musing on 


syndicate this site