XDomainRequest

已废弃
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

非标准
该特性是非标准的,请尽量不要在生产环境中使用它!

摘要

XDomainRequest是在IE8和IE9上的HTTP access control (CORS) 的实现,在IE10中被 包含CORS的XMLHttpRequest 取代了,如果你的开发目标是IE10或IE的后续版本,或想要支待其他的浏览器,你需要使用标准的HTTP access control

该接口可以发送GET和POST请求

语法

var xdr = new XDomainRequest();

返回XDomainRequest的实例,该实例可以被用来生成或管理请求。

属性

XDomainRequest.timeout
获取或设置请求的过期时间。
XDomainRequest.responseText
以字符串形式获取响应体。

方法

XDomainRequest.open()
根据指定的方法(GET或POST)和URL,打开请求。
XDomainRequest.send()
发送请求。POST的数据会在该方法中被指定。
XDomainRequest.abort()
中止请求。

事件处理程序

XDomainRequest.onprogress
当请求中发送方法和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 () {
    //Progress
  };
  xdr.ontimeout = function () {
    //Timeout
  };
  xdr.onerror = function () {
    //Error Occured
  };
  xdr.onload = function() {
    //success(xdr.responseText);
  }
  setTimeout(function () {
    xdr.send();
  }, 0);
}
 

注意: 如果同时多个XDomainRequests被发送,而一些请求丢失的情况下,xdr.send()的调用会在一个超时间内的(见window.setTimeout())以避免问题的发生。

安全

XDomainRequest为了确保安全构建,采用了多种方法。

  • 安全协议源必须匹配请求的URL。(http到http,https到https)。如果不匹配,请求会报“拒绝访问”的错误。
  • 被请求的URL的服务器必须带有 设置为(“*”)或包含了请求方的Access-Control-Allow-Origin的头部。

标准

该接口及其方法没有遵循标准。

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
XDomainRequest 未实现 未实现 8.0-9.x 未实现 未实现
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
XDomainRequest 未实现 未实现 ? 未实现 未实现

文档标签和贡献者