2011-11-18 104 views
5

也许每个Web开发人员很熟悉这样的模式:MSXML2.XMLHTTP请求将选择哪个版本,而没有版本后缀?

var xmlHttp = null; 
if (window.XMLHttpRequest) { 
    // If IE7, Mozilla, Safari, and so on: Use native object. 
    xmlHttp = new XMLHttpRequest(); 
} 
else 
{ 
    if (window.ActiveXObject) { 
    // ...otherwise, use the ActiveX control for IE5.x and IE6. 
    xmlHttp = new ActiveXObject('MSXML2.XMLHTTP'); 
    } 
} 

但问题是 - 如果有客户端的PC上提供多个MSXML版本(假设3.0,5.0,6.0),哪一个他们将通过MSXML2.XMLHTTP调用(通知没有版本后缀)选择?它会是最新的还是不一定?

还有一个问题 - 是否可以检查选择了哪个版本?

+1

这仅适用于IE6及更早版本。就我个人而言,我不会太担心哪一个确切的版本,但看看http://blogs.msdn.com/b/xmlteam/archive/2006/10/23/using-the-right-version-of- msxml-in-internet-explorer.aspx – James

+0

IE7据说具有缓慢且有问题的原生XMLHttpRequest实现,所以最好再次使用ActiveXObject('xxx.XMLHTTP')。而且IE7将会有更多的年头......所以。我知道那个资源,我从那里来,但它并没有真正回答这个问题。 – jayarjo

回答

4

正如Using the right version of MSXML in Internet Explorer说:

有很多混乱围绕“版本无关”进程id为MSXML。独立于版本的ProgID始终与MSXML 3绑定(许多人认为它会提供最新的MSXML)。这意味着版本独立的ProgID和“3.0”ProgIDs将返回相同的对象。

这应该是不够清楚,我会想,因为我们知道MSXML2.XMLHTTP是独立于版本的ProgID。但许多网页脚本不是我想的Windows程序员。

证明只需使用regedit并对此字符串执行查找。

据我可以告诉没有任何“版本”属性进行检查。

+0

我错过了那一段。谢谢! – jayarjo