BrowserVersionOwn?TypeAs String
Chrome80.0.3967???
Chrome80.0.3963???
Chrome80.0.3957ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome80.0.3955ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome79.0.3945ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome79.0.3928ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome79.0.3915ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome78.0.3904ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome78.0.3902ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome78.0.3901ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome78.0.3895???
Chrome78.0.3887ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome78.0.3876ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3865ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3858ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3855ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3849ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3835ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome77.0.3833ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome76.0.3809ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome76.0.3804???
Chrome76.0.3802ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome76.0.3800ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome76.0.3788ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome75.0.3900ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome75.0.3770ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome75.0.3755ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome74.0.3729ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome73.0.3683ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome72.0.3626ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome72.0.3617ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome72.0.3598ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome71.0.3578ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome71.0.3539ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome70.0.3538ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome70.0.3534ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome70.0.3531ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome70.0.3522ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome70.0.3520ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3497ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3494ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3481ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3472ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3466ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3457ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome69.0.3449ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3440ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3434ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3431???
Chrome68.0.3428???
Chrome68.0.3423ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3409ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3400ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome68.0.3398ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome67.0.3500ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome67.0.3396ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome67.0.3394ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome67.0.3386ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome67.0.3384???
Chrome66.0.3450ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome66.0.3359ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome66.0.3336ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome65.0.3325ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome65.0.3298???
Chrome65.0.3294ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome65.0.3136???
Chrome64.0.3350ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome64.0.3282ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome64.0.3253ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome63.0.3239ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome63.0.3231ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome63.0.3214???
Chrome63.0.3205ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome62.0.3202ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome62.0.3176ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome62.0.3175ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome62.0.3172ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome62.0.3166???
Chrome61.0.3163ownfunctionclass XMLHttpRequest extends XMLHttpRequestEventTarget.interface { constructor() { // eslint-disable-line constructor-super const theThis = Object.create(new.target.prototype); XMLHttpRequestEventTarget.setup(theThis); theThis.upload = XMLHttpRequestUpload.create(); theThis.upload._ownerDocument = window.document; theThis[xhrSymbols.flag] = { synchronous: false, withCredentials: false, mimeType: null, auth: null, method: undefined, responseType: "", requestHeaders: {}, referrer: theThis._ownerDocument.URL, uri: "", timeout: 0, body: undefined, formData: false, preflight: false, requestManager: theThis._ownerDocument._requestManager, pool: theThis._ownerDocument._pool, agentOptions: theThis._ownerDocument._agentOptions, strictSSL: theThis._ownerDocument._strictSSL, proxy: theThis._ownerDocument._proxy, cookieJar: theThis._ownerDocument._cookieJar, encoding: theThis._ownerDocument._encoding, origin: theThis._ownerDocument.origin, userAgent: window.navigator.userAgent }; theThis[xhrSymbols.properties] = { beforeSend: false, send: false, timeoutStart: 0, timeoutId: 0, timeoutFn: null, client: null, responseHeaders: {}, filteredResponseHeaders: [], responseBuffer: null, responseCache: null, responseTextCache: null, responseXMLCache: null, responseURL: "", readyState: XMLHttpRequest.UNSENT, status: 0, statusText: "", error: "", uploadComplete: false, uploadListener: false, abortError: false, // Signifies that we're calling abort() from xhr-utils.js because of a window shutdown. // In that case the termination reason is "fatal", not "end-user abort". cookieJar: theThis._ownerDocument._cookieJar, bufferStepSize: 1 * 1024 * 1024, // pre-allocate buffer increase step size. init value is 1MB totalReceivedChunkSize: 0 }; return theThis; } get readyState() { return this[xhrSymbols.properties].readyState; } get status() { return this[xhrSymbols.properties].status; } get statusText() { return this[xhrSymbols.properties].statusText; } get responseType() { return this[xhrSymbols.flag].responseType; } set responseType(responseType) { const flag = this[xhrSymbols.flag]; if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) { throw new DOMException(DOMException.INVALID_STATE_ERR); } if (this.readyState === XMLHttpRequest.OPENED && flag.synchronous) { throw new DOMException(DOMException.INVALID_ACCESS_ERR); } if (!XMLHttpRequestResponseType.has(responseType)) { responseType = ""; } flag.responseType = responseType; } get response() { const properties = this[xhrSymbols.properties]; if (properties.responseCache) { return properties.responseCache; } let res = ""; const responseBuffer = !properties.responseBuffer ? null : properties.responseBuffer.slice(0, properties.totalReceivedChunkSize); switch (this.responseType) { case "": case "text": { res = this.responseText; break; } case "arraybuffer": { if (!responseBuffer) { return null; } res = (new Uint8Array(responseBuffer)).buffer; break; } case "blob": { if (!responseBuffer) { return null; } const contentType = finalMIMEType(this); res = Blob.create([[new Uint8Array(responseBuffer)], { type: contentType && contentType.toString() || "" }]); break; } case "document": { res = this.responseXML; break; } case "json": { if (this.readyState !== XMLHttpRequest.DONE || !responseBuffer) { res = null; } const fallbackEncoding = finalCharset(this) || whatwgEncoding.getBOMEncoding(responseBuffer) || "UTF-8"; const jsonStr = whatwgEncoding.decode(responseBuffer, fallbackEncoding); try { res = JSON.parse(jsonStr); } catch (e) { res = null; } break; } } properties.responseCache = res; return res; } get responseText() { const properties = this[xhrSymbols.properties]; if (this.responseType !== "" && this.responseType !== "text") { throw new DOMException(DOMException.INVALID_STATE_ERR); } if (this.readyState !== XMLHttpRequest.LOADING && this.readyState !== XMLHttpRequest.DONE) { return ""; } if (properties.responseTextCache) { return properties.responseTextCache; } const responseBuffer = !properties.responseBuffer ? null : properties.responseBuffer.slice(0, properties.totalReceivedChunkSize); if (!responseBuffer) { return ""; } const fallbackEncoding = finalCharset(this) || whatwgEncoding.getBOMEncoding(responseBuffer) || "UTF-8"; const res = whatwgEncoding.decode(responseBuffer, fallbackEncoding); properties.responseTextCache = res; return res; } get responseXML() { const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; if (this.responseType !== "" && this.responseType !== "document") { throw new DOMException(DOMException.INVALID_STATE_ERR); } if (this.readyState !== XMLHttpRequest.DONE) { return null; } if (properties.responseXMLCache) { return properties.responseXMLCache; } const responseBuffer = !properties.responseBuffer ? null : properties.responseBuffer.slice(0, properties.totalReceivedChunkSize); if (!responseBuffer) { return null; } const contentType = finalMIMEType(this); let isHTML = false; let isXML = false; if (contentType) { isHTML = contentType.isHTML(); isXML = contentType.isXML(); if (!isXML && !isHTML) { return null; } } if (this.responseType === "" && isHTML) { return null; } const encoding = finalCharset(this) || whatwgEncoding.getBOMEncoding(responseBuffer) || "UTF-8"; const resText = whatwgEncoding.decode(responseBuffer, encoding); if (!resText) { return null; } const res = Document.create([], { core: window._core, options: { url: flag.uri, lastModified: new Date(getResponseHeader(this, "last-modified")), parsingMode: isHTML ? "html" : "xml", cookieJar: { setCookieSync: () => undefined, getCookieStringSync: () => "" }, encoding, parseOptions: this._ownerDocument._parseOptions } }); const resImpl = idlUtils.implForWrapper(res); try { resImpl._htmlToDom.appendToDocument(resText, resImpl); } catch (e) { properties.responseXMLCache = null; return null; } res.close(); properties.responseXMLCache = res; return res; } get responseURL() { return this[xhrSymbols.properties].responseURL; } get timeout() { return this[xhrSymbols.flag].timeout; } set timeout(val) { const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; if (flag.synchronous) { throw new DOMException(DOMException.INVALID_ACCESS_ERR); } flag.timeout = val; clearTimeout(properties.timeoutId); if (val > 0 && properties.timeoutFn) { properties.timeoutId = setTimeout( properties.timeoutFn, Math.max(0, val - ((new Date()).getTime() - properties.timeoutStart)) ); } else { properties.timeoutFn = null; properties.timeoutStart = 0; } } get withCredentials() { return this[xhrSymbols.flag].withCredentials; } set withCredentials(val) { const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; if (!(this.readyState === XMLHttpRequest.UNSENT || this.readyState === XMLHttpRequest.OPENED)) { throw new DOMException(DOMException.INVALID_STATE_ERR); } if (properties.send) { throw new DOMException(DOMException.INVALID_STATE_ERR); } flag.withCredentials = val; } abort() { const properties = this[xhrSymbols.properties]; // Terminate the request clearTimeout(properties.timeoutId); properties.timeoutFn = null; properties.timeoutStart = 0; const client = properties.client; if (client) { client.abort(); properties.client = null; } if (properties.abortError) { // Special case that ideally shouldn't be going through the public API at all. // Run the https://xhr.spec.whatwg.org/#handle-errors "fatal" steps. properties.readyState = XMLHttpRequest.DONE; properties.send = false; setResponseToNetworkError(this); return; } if ((this.readyState === XMLHttpRequest.OPENED && properties.send) || this.readyState === XMLHttpRequest.HEADERS_RECEIVED || this.readyState === XMLHttpRequest.LOADING) { requestErrorSteps(this, "abort"); } if (this.readyState === XMLHttpRequest.DONE) { properties.readyState = XMLHttpRequest.UNSENT; setResponseToNetworkError(this); } } getAllResponseHeaders() { const properties = this[xhrSymbols.properties]; const readyState = this.readyState; if (readyState === XMLHttpRequest.UNSENT || readyState === XMLHttpRequest.OPENED) { return ""; } return Object.keys(properties.responseHeaders) .filter(key => properties.filteredResponseHeaders.indexOf(key) === -1) .map(key => [toByteString(key).toLowerCase(), properties.responseHeaders[key]].join(": ")) .join("\r\n"); } getResponseHeader(header) { const properties = this[xhrSymbols.properties]; const readyState = this.readyState; if (readyState === XMLHttpRequest.UNSENT || readyState === XMLHttpRequest.OPENED) { return null; } const lcHeader = toByteString(header).toLowerCase(); if (properties.filteredResponseHeaders.find(filtered => lcHeader === filtered.toLowerCase())) { return null; } return getResponseHeader(this, lcHeader); } open(method, uri, asynchronous, user, password) { if (!this._ownerDocument) { throw new DOMException(DOMException.INVALID_STATE_ERR); } const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; const argumentCount = arguments.length; if (argumentCount < 2) { throw new TypeError("Not enough arguments (expected at least 2)"); } method = toByteString(method); if (!tokenRegexp.test(method)) { throw new DOMException(DOMException.SYNTAX_ERR); } const upperCaseMethod = method.toUpperCase(); if (forbiddenRequestMethods.has(upperCaseMethod)) { throw new DOMException(DOMException.SECURITY_ERR); } const client = properties.client; if (client && typeof client.abort === "function") { client.abort(); } if (allowedRequestMethods.has(upperCaseMethod)) { method = upperCaseMethod; } if (typeof asynchronous !== "undefined") { flag.synchronous = !asynchronous; } else { flag.synchronous = false; } if (flag.responseType && flag.synchronous) { throw new DOMException(DOMException.INVALID_ACCESS_ERR); } if (flag.synchronous && flag.timeout) { throw new DOMException(DOMException.INVALID_ACCESS_ERR); } flag.method = method; let urlObj; try { urlObj = new URL(uri, documentBaseURLSerialized(this._ownerDocument)); } catch (e) { throw new DOMException(DOMException.SYNTAX_ERR); } if (user || (password && !urlObj.username)) { flag.auth = { user, pass: password }; urlObj.username = ""; urlObj.password = ""; } flag.uri = urlObj.href; flag.requestHeaders = {}; flag.preflight = false; properties.send = false; properties.uploadListener = false; properties.requestBuffer = null; properties.requestCache = null; properties.abortError = false; properties.responseURL = ""; readyStateChange(this, XMLHttpRequest.OPENED); } overrideMimeType(mime) { mime = String(mime); const readyState = this.readyState; if (readyState === XMLHttpRequest.LOADING || readyState === XMLHttpRequest.DONE) { throw new DOMException(DOMException.INVALID_STATE_ERR); } this[xhrSymbols.flag].overrideMIMEType = "application/octet-stream"; const parsed = parseContentType(mime); if (parsed) { this[xhrSymbols.flag].overrideMIMEType = parsed.type + "/" + parsed.subtype; const charset = parsed.get("charset"); if (charset) { this[xhrSymbols.flag].overrideCharset = whatwgEncoding.labelToName(charset); } } } send(body) { body = coerceBodyArg(body); // Not per spec, but per tests: https://github.com/whatwg/xhr/issues/65 if (!this._ownerDocument) { throw new DOMException(DOMException.INVALID_STATE_ERR); } const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; if (this.readyState !== XMLHttpRequest.OPENED || properties.send) { throw new DOMException(DOMException.INVALID_STATE_ERR); } properties.beforeSend = true; try { if (flag.method === "GET" || flag.method === "HEAD") { body = null; } if (body !== null) { let encoding = null; let mimeType = null; if (Document.isImpl(body)) { encoding = "UTF-8"; mimeType = (body._parsingMode === "html" ? "text/html" : "application/xml") + ";charset=UTF-8"; flag.body = domToHtml([body]); } else { if (typeof body === "string") { encoding = "UTF-8"; } const { buffer, formData, contentType } = extractBody(body); mimeType = contentType; flag.body = buffer || formData; flag.formData = Boolean(formData); } const existingContentType = xhrUtils.getRequestHeader(flag.requestHeaders, "content-type"); if (mimeType !== null && existingContentType === null) { flag.requestHeaders["Content-Type"] = mimeType; } else if (existingContentType !== null && encoding !== null) { const parsed = parseContentType(existingContentType); if (parsed) { for (const param of parsed.parameterList) { if (param.key && param.key.toLowerCase() === "charset") { if (param.value.toLowerCase() !== encoding.toLowerCase()) { param.value = encoding; } } } xhrUtils.updateRequestHeader(flag.requestHeaders, "content-type", parsed.toString()); } } } } finally { if (properties.beforeSend) { properties.beforeSend = false; } else { throw new DOMException(DOMException.INVALID_STATE_ERR); } } if (Object.keys(idlUtils.implForWrapper(this.upload)._eventListeners).length > 0) { properties.uploadListener = true; } // request doesn't like zero-length bodies if (flag.body && flag.body.byteLength === 0) { flag.body = null; } if (flag.synchronous) { const flagStr = JSON.stringify(flag, function (k, v) { if (this === flag && k === "requestManager") { return null; } if (this === flag && k === "pool" && v) { return { maxSockets: v.maxSockets }; } return v; }); const res = spawnSync( process.execPath, [syncWorkerFile], { input: flagStr } ); if (res.status !== 0) { throw new Error(res.stderr.toString()); } if (res.error) { if (typeof res.error === "string") { res.error = new Error(res.error); } throw res.error; } const response = JSON.parse(res.stdout.toString(), (k, v) => { if (k === "responseBuffer" && v && v.data) { return new Buffer(v.data); } if (k === "cookieJar" && v) { return tough.CookieJar.deserializeSync(v, this._ownerDocument._cookieJar.store); } return v; }); response.properties.readyState = XMLHttpRequest.LOADING; this[xhrSymbols.properties] = response.properties; if (response.properties.error) { dispatchError(this); throw new DOMException(DOMException.NETWORK_ERR, response.properties.error); } else { const responseBuffer = this[xhrSymbols.properties].responseBuffer; const contentLength = getResponseHeader(this, "content-length") || "0"; const bufferLength = parseInt(contentLength) || responseBuffer.length; const progressObj = { lengthComputable: false }; if (bufferLength !== 0) { progressObj.total = bufferLength; progressObj.loaded = bufferLength; progressObj.lengthComputable = true; } this.dispatchEvent(new ProgressEvent("progress", progressObj)); readyStateChange(this, XMLHttpRequest.DONE); this.dispatchEvent(new ProgressEvent("load", progressObj)); this.dispatchEvent(new ProgressEvent("loadend", progressObj)); } } else { properties.send = true; this.dispatchEvent(new ProgressEvent("loadstart")); const client = xhrUtils.createClient(this); properties.client = client; // For new client, reset totalReceivedChunkSize and bufferStepSize properties.totalReceivedChunkSize = 0; properties.bufferStepSize = 1 * 1024 * 1024; properties.origin = flag.origin; client.on("error", err => { client.removeAllListeners(); properties.error = err; dispatchError(this); }); client.on("response", res => receiveResponse(this, res)); client.on("redirect", () => { const response = client.response; const destUrlObj = new URL(response.request.headers.Referer); const urlObj = new URL(response.request.uri.href); if (destUrlObj.origin !== urlObj.origin && destUrlObj.origin !== flag.origin) { properties.origin = "null"; } response.request.headers.Origin = properties.origin; if (flag.origin !== destUrlObj.origin && destUrlObj.protocol !== "data:") { if (!validCORSHeaders(this, response, flag, properties, flag.origin)) { return; } if (urlObj.username || urlObj.password) { properties.error = "Userinfo forbidden in cors redirect"; dispatchError(this); return; } } }); if (body !== null && body !== "") { properties.uploadComplete = false; setDispatchProgressEvents(this); } else { properties.uploadComplete = true; } if (this.timeout > 0) { properties.timeoutStart = (new Date()).getTime(); properties.timeoutFn = () => { client.abort(); if (!(this.readyState === XMLHttpRequest.UNSENT || (this.readyState === XMLHttpRequest.OPENED && !properties.send) || this.readyState === XMLHttpRequest.DONE)) { properties.send = false; let stateChanged = false; if (!properties.uploadComplete) { this.upload.dispatchEvent(new ProgressEvent("progress")); readyStateChange(this, XMLHttpRequest.DONE); this.upload.dispatchEvent(new ProgressEvent("timeout")); this.upload.dispatchEvent(new ProgressEvent("loadend")); stateChanged = true; } this.dispatchEvent(new ProgressEvent("progress")); if (!stateChanged) { readyStateChange(this, XMLHttpRequest.DONE); } this.dispatchEvent(new ProgressEvent("timeout")); this.dispatchEvent(new ProgressEvent("loadend")); } properties.readyState = XMLHttpRequest.UNSENT; }; properties.timeoutId = setTimeout(properties.timeoutFn, this.timeout); } } flag.body = undefined; flag.formData = false; } setRequestHeader(header, value) { const flag = this[xhrSymbols.flag]; const properties = this[xhrSymbols.properties]; if (arguments.length !== 2) { throw new TypeError("2 arguments required for setRequestHeader"); } header = toByteString(header); value = toByteString(value); if (this.readyState !== XMLHttpRequest.OPENED || properties.send) { throw new DOMException(DOMException.INVALID_STATE_ERR); } value = normalizeHeaderValue(value); if (!tokenRegexp.test(header) || !fieldValueRegexp.test(value)) { throw new DOMException(DOMException.SYNTAX_ERR); } const lcHeader = header.toLowerCase(); if (forbiddenRequestHeaders.has(lcHeader) || lcHeader.startsWith("sec-") || lcHeader.startsWith("proxy-")) { return; } const keys = Object.keys(flag.requestHeaders); let n = keys.length; while (n--) { const key = keys[n]; if (key.toLowerCase() === lcHeader) { flag.requestHeaders[key] += ", " + value; return; } } flag.requestHeaders[header] = value; } get _ownerDocument() { return idlUtils.implForWrapper(window.document); } }
Chrome61.0.3159???
Chrome61.0.3156ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome61.0.3150ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome61.0.3149ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome61.0.3147ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome61.0.3126???
Chrome60.0.3112ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome60.0.2488ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome59.0.3071ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome58.0.3300ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome58.0.3050ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome58.0.3029ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome57.0.2987???
Chrome56.0.2924ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome55.0.2883ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome54.0.5485???
Chrome54.0.2840ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome53.0.2785ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome52.0.2743ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome51.0.2704ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome50.0.2661ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome49.0.2623ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome48.0.6483???
Chrome48.0.2564ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome47.0.2526???
Chrome46.0.2490???
Chrome45.0.2454???
Chrome44.0.2403ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome43.0.2357???
Chrome42.0.2311ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome41.0.2272ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome40.0.2214ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome39.0.2596???
Chrome39.0.2171???
Chrome38.0.2125ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome38.0.1025ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome37.0.2062ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome36.0.1985ownobject[object XMLHttpRequestConstructor]
Chrome35.0.1916ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome34.0.1847ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome33.0.1750ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome31.0.1650ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome29.0.1547???
Chrome27.0.1453ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome25.0.1364ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome24.0.1312ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome19.0.1084ownfunctionfunction XMLHttpRequest() { [native code] }
Chrome15.0.874ownfunctionfunction XMLHttpRequest() { [native code] }
CriOS66.0.3359???
CriOS65.0.3325???
CriOS64.0.3282???
CriOS62.0.3202???
CriOS59.0.3071???
Edge80.0.320ownfunctionfunction XMLHttpRequest() { [native code] }
Edge79.0.287ownfunctionfunction XMLHttpRequest() { [native code] }
Edge78.0.276ownfunctionfunction XMLHttpRequest() { [native code] }
Edge78.0.268ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.235ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.232ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.222ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.221ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.217ownfunctionfunction XMLHttpRequest() { [native code] }
Edge77.0.186ownfunctionfunction XMLHttpRequest() { [native code] }
Edge76.0.174ownfunctionfunction XMLHttpRequest() { [native code] }
Edge76.0.169ownfunctionfunction XMLHttpRequest() { [native code] }
Edge76.0.167ownfunctionfunction XMLHttpRequest() { [native code] }
Edge76.0.147ownfunctionfunction XMLHttpRequest() { [native code] }
Edge76.0.141ownfunctionfunction XMLHttpRequest() { [native code] }
Edge75.0.130ownfunctionfunction XMLHttpRequest() { [native code] }
Edge75.0.126ownfunctionfunction XMLHttpRequest() { [native code] }
Edge75.0.121ownfunctionfunction XMLHttpRequest() { [native code] }
Edge75.0.111ownfunctionfunction XMLHttpRequest() { [native code] }
Edge74.1.96ownfunctionfunction XMLHttpRequest() { [native code] }
Edge18.18363.0???
Edge18.18362.0???
Edge18.17763.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge17.17134.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge16.16299.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge15.15063.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge14.14393.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge13.10586.0ownfunctionfunction XMLHttpRequest() { [native code] }
Edge12.10136.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox71.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox70.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox69.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox68.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox67.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox66.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox65.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox64.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox63.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox62.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox61.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox60.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox59.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox58.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox57.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox56.2.5???
Firefox56.2.3ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox56.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox55.0.0ownfunction function XMLHttpRequest() { [native code] }
Firefox54.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox53.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox52.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox51.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox50.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox49.0.0???
Firefox48.0.0ownobject[object XMLHttpRequestConstructor]
Firefox47.0.0???
Firefox45.0.0???
Firefox44.0.0???
Firefox43.0.0???
Firefox39.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox38.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Firefox35.0.0???
Firefox33.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox30.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox29.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox28.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox27.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox24.0.0inheritedfunctionfunction XMLHttpRequest() { [native code] }
Firefox18.0.0???
Firefox6.0.0???
Firefox5.0.1???
FxiOS19.1.0???
Googlebot2.1.0ownfunctionfunction XMLHttpRequest() { [native code] }
IE11.0.0ownfunction function XMLHttpRequest() { [native code] }
IE10.0.0ownfunction function XMLHttpRequest() { [native code] }
IE9.0.0ownfunction function XMLHttpRequest() { [native code] }
Opera9.80.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari538.1.0ownobject[object XMLHttpRequestConstructor]
Safari13.0.3???
Safari13.0.2???
Safari13.0.1ownfunctionfunction XMLHttpRequest() { [native code] }
Safari13.0.0???
Safari12.1.2ownfunctionfunction XMLHttpRequest() { [native code] }
Safari12.1.1???
Safari12.1.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari12.0.3ownfunctionfunction XMLHttpRequest() { [native code] }
Safari12.0.2???
Safari12.0.1ownfunctionfunction XMLHttpRequest() { [native code] }
Safari12.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari11.1.2ownfunctionfunction XMLHttpRequest() { [native code] }
Safari11.1.1???
Safari11.1.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari11.0.3???
Safari11.0.2???
Safari11.0.1???
Safari11.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari10.1.2ownfunctionfunction XMLHttpRequest() { [native code] }
Safari10.1.1ownfunctionfunction XMLHttpRequest() { [native code] }
Safari10.1.0???
Safari10.0.3???
Safari10.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari9.1.3ownobject[object XMLHttpRequestConstructor]
Safari9.1.2???
Safari8.0.8ownobject[object XMLHttpRequestConstructor]
Safari8.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari7.1.8ownobject[object XMLHttpRequestConstructor]
Safari7.0.3???
Safari7.0.0ownobject[object XMLHttpRequestConstructor]
Safari6.0.5ownobject[object XMLHttpRequestConstructor]
Safari5.1.7ownobject[object XMLHttpRequestConstructor]
Safari5.0.5???
Safari4.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Safari3.1.1ownfunctionfunction XMLHttpRequest() { [native code] }
SamsungBrowser9.2.0ownfunctionfunction XMLHttpRequest() { [native code] }
SamsungBrowser9.0.0???
SamsungBrowser7.2.0ownfunctionfunction XMLHttpRequest() { [native code] }
SamsungBrowser6.2.0ownfunctionfunction XMLHttpRequest() { [native code] }
SamsungBrowser4.0.0ownfunctionfunction XMLHttpRequest() { [native code] }
Scrapy1.8.0???

PropertiesChromeCriOSEdgeFirefoxFxiOSGooglebotIEOperaSafariSamsungBrowserScrapy
create 61.0.3163? 13.10586.0 55.0.0?? 9.0.0????
DONE 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0 9.80.0 3.0.0 4.0.0?
HEADERS_RECEIVED 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0 9.80.0 3.0.0 4.0.0?
length 15.0.874? 12.0.0 24.0.0? 2.1.0?? 3.0.0 4.0.0?
LOADING 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0 9.80.0 3.0.0 4.0.0?
OPENED 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0 9.80.0 3.0.0 4.0.0?
prototype 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0? 3.0.0 4.0.0?
toString 15.0.874?? 24.0.0? 2.1.0?? 4.0.0 4.0.0?
UNSENT 15.0.874? 12.0.0 24.0.0? 2.1.0 9.0.0 9.80.0 3.0.0 4.0.0?