XDomainRequest - 在 IE 8 和 9 中,使用 HTTP 访问控制(CORS)的实现
已过时
此功能已过时。虽然它可能仍在某些浏览器中工作,但是不鼓励使用,因为它可能随时被删除。尽量避免使用它。
此功能已过时。虽然它可能仍在某些浏览器中工作,但是不鼓励使用,因为它可能随时被删除。尽量避免使用它。
非标准
该功能是非标准的。请尽量不要在生产环境中使用它:因为每个用户不一定会正常运行。它的实现可能存在很大的不兼容性,并且将来可能会改变行为。
XDomainRequest
是在 Internet Explorer 8 和 9 中,使用 HTTP 访问控制(CORS)的实现。它在 Internet Explorer 10 中已被删除,应改为使用 XMLHttpRequest 以及配置相应的 CORS;如果您的目标是 Internet Explorer 10 或更高版本,或者希望支持任何其他浏览器,则需要使用标准的 HTTP 访问控制。
该接口可以发送 GET 和 POST 请求。
语法
var xdr = new XDomainRequest();
返回一个新的 XDomainRequest
对象,该对象随后可以用于发出和管理这些请求。
属性
XDomainRequest.timeout
获取或设置直到请求超时的时间。
XDomainRequest.responseText
以字符串形式获取响应主体。
方法
XDomainRequest.open()
使用指定方法(GET / POST)和 URL 打开请求。
XDomainRequest.send()
发送请求。POST 数据在此方法中指定。
XDomainRequest.abort()
中止请求。
事件处理程序
XDomainRequest.onprogress
一个处理程序,请求在调用 send
方法之后,触发 onload
事件之前触发。
XDomainRequest.ontimeout
请求超时的处理程序。
XDomainRequest.onerror
请求错误时的处理程序。
XDomainRequest.onload
从服务器收到完整响应时的处理程序。
实例
if(window.XDomainRequest){
var xdr = new XDomainRequest();
xdr.open("get", "http://example.com/api/method");
xdr.onprogress = function () {
// 处理中
};
xdr.ontimeout = function () {
// 超时
};
xdr.onerror = function () {
// 发生错误
};
xdr.onload = function() {
//success(xdr.responseText);
}
setTimeout(function () {
xdr.send();
}, 0);
}
注意:
xdr.send()
调用被包装在一个超时中(请参阅window.setTimeout()
),以防止接口出现问题,如果同时发送多个XDomainRequest
,则某些请求会丢失。
注意: 应该始终定义
xdr.onprogress
事件,即使它是一个空函数,否则XDomainRequest
对于重复请求,可能不会触发onload
事件。
安全
XDomainRequest
通过多种方式确保安全。
- 来源的安全协议必须与请求的 URL 的安全协议匹配。(http 到 http,https 到 https)。如果这些不匹配,则请求将出现 “Access is Denied” 错误。
- 所请求的 URL 服务器必须将
Access-Control-Allow-Origin
标头设置为全部(“*”)或包含请求的来源。
规范
此接口及其方法是非标准的。
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
abort | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
onerror | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
onload | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
onprogress | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
ontimeout | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
open | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
responseText | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
send | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
timeout | 不支持 | 不支持 | 不支持 | 8 — 11 | 不支持 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
abort | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
onerror | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
onload | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
onprogress | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
ontimeout | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
open | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
responseText | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
send | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
timeout | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |