XMLHttpRequest (XHR) 浏览器兼容性详解
核心兼容性列表
1. 基础支持情况
2. 高级特性支持
3. 事件支持差异
兼容性解决方案
1. 创建兼容的XHR对象
function createXHR() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest(); // 标准浏览器
}
try {
return new ActiveXObject("Msxml2.XMLHTTP"); // IE6+
} catch(e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP"); // IE5
} catch(e) {
throw new Error("浏览器不支持XHR");
}
}
}:ml-citation{ref="7" data="citationList"}2. 特性检测方案
// 检测超时支持
const supportsTimeout = 'timeout' in new XMLHttpRequest();
// 检测responseType支持
const xhr = new XMLHttpRequest();
xhr.responseType = 'json';
const supportsJSON = xhr.responseType === 'json';:ml-citation{ref="9" data="citationList"}现代浏览器注意事项
CORS限制:所有现代浏览器严格执行同源策略,跨域请求需服务器设置
Access-Control-Allow-OriginHTTPS要求:现代浏览器对混合内容(XHR从HTTPS页面向HTTP地址请求)会阻止或警告
隐私限制:Safari等浏览器对第三方cookie的限制会影响withCredentials的使用
推荐替代方案
Fetch API:更现代的替代方案,但IE完全不支持
Axios:基于XHR的封装,处理了大部分兼容性问题
jQuery.ajax:兼容旧浏览器的封装方案
移动端特殊考虑
iOS Safari:对并发请求数有限制(同一域名最多6个)
Android WebView:可能禁用XHR,需特殊配置
省电模式:可能限制后台XHR请求