The problem here is the way the interceptor chain is invoked: by using a function/method name of XHR. In IE (using XHR==ActiveXObject) referencing xhr[methodName] results in an immediate call of the affected function without any arguments! It means there is no way to retrieve a "function pointer" to the required function. The following snippet will throw a weird exception on IE: "TypeError: Wrong number of arguments or invalid property assignment":

```javascript

if(window.ActiveXObject) {
    XMLHttpRequest = function() {
            var progIDs = ["Msxml2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
            return new ActiveXObject(progIDs[0]);
        };
}

if(window.ActiveXObject) {
    XMLHttpRequest = function() {
            var progIDs = ["Msxml2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
            return new ActiveXObject(progIDs[0]);
        };
}

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){console.log('The state is: ' + xhr.readyState);};
var methodName = 'open';
var args = ['POST', 'http://www.jboss.org', true];
//apply fails on IE
try { xhr[methodName].apply(xhr, args); } catch(e) { console.error(e); }
try { xhr[methodName]; } catch(e) { console.error(e); }
try { Function.prototype.apply.call(xhr[methodName], xhr, args); } catch(e) { console.error(e); }
//succeeds
xhr.open(args[0], args[1], args[2]);

```