| // browser shim for xmlhttprequest module | |
| var hasCORS = require('has-cors'); | |
| module.exports = function (opts) { | |
| var xdomain = opts.xdomain; | |
| // scheme must be same when usign XDomainRequest | |
| // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx | |
| var xscheme = opts.xscheme; | |
| // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default. | |
| // https://github.com/Automattic/engine.io-client/pull/217 | |
| var enablesXDR = opts.enablesXDR; | |
| // XMLHttpRequest can be disabled on IE | |
| try { | |
| if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { | |
| return new XMLHttpRequest(); | |
| } | |
| } catch (e) { } | |
| // Use XDomainRequest for IE8 if enablesXDR is true | |
| // because loading bar keeps flashing when using jsonp-polling | |
| // https://github.com/yujiosaka/socke.io-ie8-loading-example | |
| try { | |
| if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) { | |
| return new XDomainRequest(); | |
| } | |
| } catch (e) { } | |
| if (!xdomain) { | |
| try { | |
| return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP'); | |
| } catch (e) { } | |
| } | |
| }; | |