www.baike369.com
百科369 > Ajax教程 > XMLHttpRequest(XHR)对象对ActiveX XHR的担心

XMLHttpRequest(XHR)对象对ActiveX XHR的担心


XMLHttpRequest(XHR)对象对ActiveX XHR的担心

在使用旧版本的IE浏览器(版本号为5、5.5和6)的情况下,实例化XHR对象稍微有些困难,其方法是通过使用ActiveXObject的构造函数,并且传递一个表示已经装过特定Microsoft XML(MSXML)解析器的字符串,例如:

var xhr=new ActiveXObject("Microsoft.XMLHTTP");

将尝试初始化最旧形式的MSXML解析器。不同版本的IE支持的MSXML解析器也不同。下表显示了在IE和支持的XML ActiveX版本之间的标准关系:

Internet Explorer版本MSXML版本(文件版本)
5.0a 2.0a(5.0.2314.1000)
5.0b 2.0b(5.0.2614.3500)
5.01 2.5a(5.0.2919.6303)
5.01 SP1 2.5 SP1(8.0.5226)
5.5 2.5 SP1(8.0.5226)
5.5 SP2 2.5 Post-SP2(8.00.6611.0)
6.0 3.0 SP2(8.20.8730.1)
6.0 SP1 3.0 SP3(8.30.9926.0)

基于这些数据,大多数Ajax库也使用程序ID为“Msxml2.XMLHTTP3”和“Msxml2.XMLHTTP”的字符串来实例化一个基于ActiveX的XHR对象。因为安装在客户端的操作系统或者应用程序的原因,也有可能使用在上表所列出的版本之外的其它版本的MSXML,同时我们也可能会选择使用它们。

考虑到关于可用的ActiveX XHR可能存在混淆之处,下面提供了一个简单的测试程序,用于检查浏览器支持什么形式的XHR。源代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>XMLHttpRequest(XHR)对象测试-www.baike369.com</title>
<script type="text/javascript">
<!--
function XHRTester()
{
  var nativeXHR=false;
  var activeX="";
  var commObject=null;
  try
  {
    commObject=new XMLHttpRequest();
    nativeXHR=true;
  }
  catch(e){}
  var activeXStrings=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
  for(var i=0;i<activeXStrings.length;i++)
  {
    try{
      commObject=new ActiveXObject(activeXStrings[i]);
      activeX+=activeXStrings[i]+", ";
    }
    catch(e){}
  }
  var userAgent=navigator.userAgent;
  var result="";
  if(activeX===""&&!nativeXHR)
  {
    result+="<em>None</em>";
  }
  if(nativeXHR)
  {
    result+="Native";
  }
  if(activeX!=="")
  {
    activeX=activeX.substring(0,activeX.length-2);
    result+="ActiveX["+activeX+"]";
  }
  var message="<strong>浏览器核心:</strong> "+userAgent+"<br /><strong>支持的MSXML:</strong> "+result;
  return message;
}
//-->
</script>
</head>
<body>
<h1>XHR对象支持的属性和方法</h1>
<hr />
<script type="text/javascript">
document.write(XHRTester());
if(window.XMLHttpRequest)
{
  document.write("<h3>在浏览器中枚举出的属性和方法如下:</h3>");
  var XHR=new window.XMLHttpRequest();
  for(var aprop in XHR)
  {
    document.write("<em>XMLHttpRequest</em>."+aprop+"<br />");
  }
}
</script>
</body>
</html>

显示效果如下:

XMLHttpRequest(XHR)对象对ActiveX XHR的担心

这个脚本非常易于理解,并且它简单地尝试采用不同的方法去实例化XHR对象,同时也枚举出了它的属性和方法。

当创建一个XHR对象时,要确保在调用ActiveX之前总是首先尝试本地的XHR对象,因为这样做更有效率。而且,如果考虑到在IE 7浏览器中的不同设置,我们将会看到,忽略遗留的ActiveX方法可能不是最好的方式。

Copyright© 2011-2016 www.baike369.com All Rights Reserved