如何确定是使用XMLHttpRequest还是XDomainRequest?

gee*_*h01 5 javascript xmlhttprequest

取决于浏览器,我想确定应该使用哪个对象.对于IE <10,它应该是XDomainRequest,其余的XMLHttpRequest.

if(window.XDomainRequest) //basically 'if IE'
    //XDomainRequest
else
    //XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)

由于IE10具有跨源资源共享支持,因此最好使用XMLHttpRequest对象.这段代码将不再正常工作(我想IE10仍然有支持XDomainRequest,纠正我,如果我错了,我无法测试它).直接检查浏览器并不是最安全的方法.所以我的问题是,确定应该使用哪个对象的最佳方法是什么?我正在寻找纯JS(非jQuery)解决方案.

kyb*_*kos 5

我就是这样做的,但这并不好.

var useXDR = window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined);
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为IE10对于新创建的XHR具有空字符串的responseType,但在不支持XHR2的IE版本中,它是未定义的.

如果您确实沿着这条路走下去,请记住XDR比XHR更难调试 - 当出现问题时它会为您提供更少的信息,并且即使在旧的XmlHttpRequest实现上也能正常工作的某些功能在XDR上根本不起作用.

即使您的浏览器不支持XHR2并支持XDR,当您从加载页面时请求来自同一主机/端口的URL时,您仍然希望使用XHR.