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 标头设置为全部(“*”)或包含请求的来源。

规范

此接口及其方法是非标准的。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持 不支持 不支持 不支持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 不支持 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持 不支持 未知 不支持 未知 不支持 不支持
abort 不支持 不支持 未知 不支持 未知 不支持 不支持
onerror 不支持 不支持 未知 不支持 未知 不支持 不支持
onload 不支持 不支持 未知 不支持 未知 不支持 不支持
onprogress 不支持 不支持 未知 不支持 未知 不支持 不支持
ontimeout 不支持 不支持 未知 不支持 未知 不支持 不支持
open 不支持 不支持 未知 不支持 未知 不支持 不支持
responseText 不支持 不支持 未知 不支持 未知 不支持 不支持
send 不支持 不支持 未知 不支持 未知 不支持 不支持
timeout 不支持 不支持 未知 不支持 未知 不支持 不支持