5

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

if(window.XDomainRequest) //basically 'if IE'
    //XDomainRequest
else
    //XMLHttpRequest

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

4

1 回答 1

5

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

var useXDR = window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined);

它之所以有效,是因为 IE10 有一个新创建的 XHR 的空字符串 responseType,但在不支持 XHR2 的 IE 版本中,它是未定义的。

如果您确实走这条路,请记住,XDR 比 XHR 更难调试 - 当出现问题时,它给您的信息更少,而且即使在旧 XmlHttpRequest 实现上运行良好的某些功能在 XDR 上也根本不起作用.

即使您的浏览器不支持 XHR2 并且支持 XDR,当您从与加载页面相同的主机/端口请求 url 时,您仍然希望使用 XHR。

于 2013-12-05T21:33:05.040 回答