polyfill-service
Version:
A polyfill combinator
64 lines (48 loc) • 2.16 kB
JavaScript
(function (global, NativeXMLHttpRequest) {
// <Global>.XMLHttpRequest
global.XMLHttpRequest = function XMLHttpRequest() {
var request = this, nativeRequest = request._request = NativeXMLHttpRequest ? new NativeXMLHttpRequest() : new ActiveXObject('MSXML2.XMLHTTP.3.0');
nativeRequest.onreadystatechange = function () {
request.readyState = nativeRequest.readyState;
var readyState = request.readyState === 4;
request.response = request.responseText = readyState ? nativeRequest.responseText : null;
request.status = readyState ? nativeRequest.status : null;
request.statusText = readyState ? nativeRequest.statusText : null;
request.dispatchEvent(new Event('readystatechange'));
if (readyState) {
request.dispatchEvent(new Event('load'));
}
};
if ('onerror' in nativeRequest) {
nativeRequest.onerror = function () {
request.dispatchEvent(new Event('error'));
};
}
};
var XMLHttpRequestPrototype = global.XMLHttpRequest.prototype;
XMLHttpRequestPrototype.addEventListener = global.addEventListener;
XMLHttpRequestPrototype.removeEventListener = global.removeEventListener;
XMLHttpRequestPrototype.dispatchEvent = global.dispatchEvent;
XMLHttpRequestPrototype.abort = function abort() {
return this._request();
};
XMLHttpRequestPrototype.getAllResponseHeaders = function getAllResponseHeaders() {
return this._request.getAllResponseHeaders();
};
XMLHttpRequestPrototype.getResponseHeader = function getResponseHeader(header) {
return this._request.getResponseHeader(header);
};
XMLHttpRequestPrototype.open = function open(method, url) {
// method, url, async, username, password
this._request.open(method, url, arguments[2], arguments[3], arguments[4]);
};
XMLHttpRequestPrototype.overrideMimeType = function overrideMimeType(mimetype) {
this._request.overrideMimeType(mimetype);
};
XMLHttpRequestPrototype.send = function send() {
this._request.send(0 in arguments ? arguments[0] : null);
};
XMLHttpRequestPrototype.setRequestHeader = function setRequestHeader(header, value) {
this._request.setRequestHeader(header, value);
};
})(this, this.XMLHttpRequest);