`
jindw
  • 浏览: 508381 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

MSXML2家族探秘

阅读更多
客户端程序编写免不了经常接触XMLHttpRequest对象。
微软的XHR实现的progid又是一串一串的。 烦人。抽一个中午时间,找了找资料,整理记录如下:

"Microsoft.XMLHTTP"
最早的XHR实现。微软官网上说这是MSXML 2.x系列版本的progid。
2.x 系列progid是不带版本号的。看起来简单清楚。
引用:

MSXML 2.6 was shipped with SQL Server 2000 and MDAC 2.6 and is provided in Windows or other service pack updates provided by Microsoft.

MSXML 2.6 installs in replace mode only.



"MSXML2.XMLHTTP"
MSXML 3.0 的progid,
"MSXML2.XMLHTTP.3.0"
也是MSXML 3.0 的,应该等价于MSXML2.XMLHTTP;这时,可能是感觉到那种不带版本号的progid,在升级后造成的兼容性问题,以后的更新版本的progid都可以带上版本好吗。
引用:

MSXML 3.0 is provided as a required component with a number of Microsoft products, such as Microsoft Visual Studio and Microsoft Office. It is also a system component for current versions of Microsoft Windows.

MSXML 3.0 SP2 or later installs in replace mode only. (Note: you do not need to run xmlinst.exe utility when updating to this version of MSXML 3.0)




"Msxml2.XMLHTTP.4.0"
此后的版本,都带上了版本号码,可能是为了应对程序员懒散的习惯(不喜欢带那个版本号),不提供以前那种无版本后缀的progid了。
引用:

MSXML 4.0 is a separate download that was released by Microsoft in October 2001. The latest or current service pack release of MSXML 4.0 is available through the Microsoft Web site. MSXML 4.0 must be installed separately and is not currently included with other Microsoft products.

MSXML 4.0 installs side-by-side with earlier versions of MSXML without affecting any existing functionality.


“Msxml2.XMLHTTP.5.0"

引用:

MSXML 5.0 for Microsoft Office Applications is only available with current versions of Microsoft Office.

MSXML 5.0 for Microsoft Office Applications installs side-by-side with earlier versions of MSXML without affecting any existing functionality.


"Msxml2.XMLHTTP.6.0"
引用:

MSXML 6.0 is a separate download that was released by Microsoft in November 2005. The latest or current service pack release of MSXML 6.0 is available through the Microsoft Web site. MSXML 6.0 must be installed separately. It is included with SQL Server 2005.

MSXML 6.0 installs side-by-side with earlier versions of MSXML without affecting any existing functionality.



这么多的实现,哪我们如何探测呢?一般来说,我们应该尽量采用更新的更常用的版本。
我的选择是(摘自JSI内核源码)::
js 代码
 
  1. if(this.ActiveXObject && !this.XMLHttpRequest ){  
  2.     var xmlHttpRequstActiveIds = [  
  3.         "Microsoft.XMLHTTP"//IE5的,最早的XHR实现  
  4.         ,"MSXML2.XMLHTTP"  
  5.         //,"MSXML2.XMLHTTP.3.0"//应该等价于MSXML2.XMLHTTP  
  6.         //,"Msxml2.XMLHTTP.4.0"  
  7.         ,"Msxml2.XMLHTTP.5.0"  
  8.         //,"Msxml2.XMLHTTP.6.0"  
  9.         ];  
  10.     var xmlHttpRequstActiveId  
  11.     this.XMLHttpRequest = function(){  
  12.         if(xmlHttpRequstActiveId){  
  13.             return new ActiveXObject(xmlHttpRequstActiveId);  
  14.         }else{  
  15.             var i=xmlHttpRequstActiveIds.length;  
  16.             while(i --){  
  17.                 try{  
  18.                       var impl = new ActiveXObject(xmlHttpRequstActiveId = xmlHttpRequstActiveIds[i]);  
  19.                       xmlHttpRequstActiveIds = null;  
  20.                       return impl;  
  21.                 }catch (e){}  
  22.             }  
  23.         }  
  24.     };  
  25. }  




参考:
http://msdn2.microsoft.com/en-us/library/ms762757(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/ms761415(VS.85).aspx
分享到:
评论
6 楼 jindw 2008-01-02  
test=XMLHttpRequest()
应该算一个比较常见的容错处理吧,很多内置对象都有类似的机制。
比如Date,RegExp,...
5 楼 afcn0 2008-01-01  
就是一个XHR,ie7不支持native XHR访问file://是更多的考虑安全,增加安全卖点,当然很多程序员不喜欢,所以直到今天jQuery里面ActiveX还是在XMLHttpRequest前面,当然ie7的native实现有很多优点,修正this,关闭activex下也可以用,XHR更多差异还有,比如opera上面不需要new,test=XMLHttpRequest()也可以得到对象,都弄明白不现实
4 楼 jindw 2008-01-01  
呵呵,感谢hax的权威解答。

说到IE7的native XHR,我感觉到的与其他版本最大的区别是本体测试的时候它不能访问相对路径下的本地文件系统,有点麻烦。

另外,6.0貌似只有ie7支持吧,我在IE6上都没成功过。
IE7用户那么少,首先探测6.0,失败的机会很大啊。
3 楼 hax 2008-01-01  
根据ie blog的建议,应该仅使用6.0和3.0。ie团队建议不要使用老的microsoft.xmlhttp,说这仅为兼容而保留,那个意思似乎是,如果你安装过了msxml 3.0,用microsoft.xmlhttp所产生的其实也是3.0版而不是2.6版的。

但是4.0之后似乎抛弃了replace模式,而改用版本号了。并且MSXML2.XMLHTTP会始终对应3.0,而不会选取可用的最新版本。

从各种小道新闻来看,6.0是继承3.0的,并由一个团队所开发。而4.0和5.0的开发并非主要针对浏览器的,属于旁支,存在一定的兼容问题,其中5.0是为office所开发的,甚至带有一些特性是后来的6.0所没有的(如xml数字加密)。

此外在使用6.0时,还需要注意一个问题。就是ie7所带的native xmlhttprequest貌似是基于3.0而不是6.0的,而不同版本的xml节点是不能被互相插入和移动的。所以activex的6.0和native xhr不可互用。当然这一点我还没有验证测试过。
2 楼 afcn0 2007-12-31  
曾经看过XHR ie不同版本区别测试,具体区别主要体现在http header 304支持上
1 楼 jindw 2007-12-31  

相关推荐

    ActiveObject 对象 Msxml2.DOMDocument 详解

    本文将深入探讨ActiveObject中的一个关键对象——Msxml2.DOMDocument,以及它在ASP.NET AJAX WebService中的应用。 Msxml2.DOMDocument是Microsoft XML库(MSXML)中的核心组件,它实现了W3C的Document Object ...

    MSXML 4.0 SP2 Parser and SDK

    MSXML 4.0 SP2(Service Pack 2)是该系列的一个重要版本,包含了重要的更新、性能优化和安全改进。 MSXML 4.0 SP2解析器是XML处理的核心组件,负责读取、解析和验证XML文档。这个服务包主要关注以下几个方面: 1....

    c++ MSXML2 msxml6 XML 创建读写源码

    1. 引入库:在C++代码中,你需要包含必要的头文件,例如`#include <msxml2/msxml2.h>`,并使用`using namespace msxml2;`来引用MSXML2的命名空间。 2. 初始化COM:在使用MSXML2之前,需要初始化COM库,通过调用`...

    MSXML 4.0 sp2 parser sdk

    MSXML 4.0 SP2(Service Pack 2)是该系列的一个特定版本,包含了重要的更新和性能优化。SDK(Software Development Kit)则是一套为开发人员提供的工具、文档和技术支持,帮助他们利用MSXML 4.0 SP2进行XML应用程序...

    MSXML2.dll

    MSXML2.dll可以直接引用的dll文件

    msxml2.dll 纯文件下载

    msxml2.dll 纯文件下载

    用msxml写一个xml文档

    inline void linefeed(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode) { pRootNode->appendChild(pXMLDoc->createTextNode("\n")); } inline void addTextElement(MSXML2::...

    msxml4.0 sp2

    MSXML 4.0 SP2(Service Pack 2)是该组件的一个更新版本,旨在提高性能、稳定性以及安全性。这个服务包包含了对之前版本的修复和改进,对于使用XML技术进行开发的程序员来说至关重要。 **XML 技术基础** XML...

    win7中vfp软件安装后出现 0: 找不到MSXML2.DOMDOCUMENT.4.0类定义

    win7中vfp软件安装后出现 0: 找不到MSXML2.DOMDOCUMENT.4.0类定义,此中是Dll文件下载,直接放在c:\windows\system目录下即可!msxml4.cab

    msxml4.0_SP3 msxml4.0_SP3 msxml4.0

    2. **稳定性**:服务包还增强了软件的稳定性和兼容性,解决了用户在使用MSXML 4.0时可能遇到的问题,确保了更流畅的应用体验。 3. **性能提升**:通过优化内部算法和数据处理,SP3可能提高了XML文档的解析速度,...

    msxml2.dll

    今天需要这个东西,在网上找了好久才找到,发这里方便供有需要的朋友。

    MsXml2.lib 操作 XML 文件 必须的 lib

    MsXml2.lib 操作 XML 文件 必须的 lib

    msxml5 补丁 安装文件

    再运行测试createobject("msxml2.serverxmlhttp.5.0")通过即msxml5安装正确。 msxml5.dll和msxml5r.dll是office提供的。 5.0 (office 2003) msxml5.dll、msxml5r.dll (5.0.2916.0)(最后一个 dll 是纯资源 dll)...

    MSXML6.0 官方安装版

    MSXML6的目的是为现有用户MSXML3和MSXML4用户的升级路径,充分利用旧的ProgID 技术在一些MSXML3和MSXML4。 微软的xml语言解析器,用来解释xml语言的。就好像html文本下载到本地,浏览器会检查html的语法,解释html...

    MsXML4 运行库

    2. **XSLT转换**: MsXML4支持XSLT(Extensible Stylesheet Language Transformations),可以将XML文档转换为其他格式,如HTML、XML或者文本。 3. **XPath查询**: 提供了XPath API,使得开发者可以通过路径表达式来...

    官方MSXML修复工具

    2. **使用说明.txt**:这个文件很可能是包含有关如何使用修复工具的指南,包括可能的步骤、注意事项以及常见问题解答。在开始修复过程前,用户应仔细阅读这份文件,以了解如何正确、安全地执行修复操作。 MSXML在...

    Microsoft ADO Msxml2.ServerXMLHTTP Msxml2.XMLHTTP 程序员参考手册中文版CHM

    《Msxml2.XMLHTTP 中文参考手册.chm》 《Msxml2.ServerXMLHTTP 中文参考手册.chm》 Msxml2.ServerXMLHTTP 对象 Member 成员 以下表格显示了ServerXMLHTTP对象的属性、方法、事件。 Properties 属性 responseBody ...

    MSXML解析XML文档

    1. **XML解析器**:MSXML提供了几种不同的解析器,如MSXML2.DOMDocument、MSXML2.FreeThreadedDOMDocument等,它们能够加载XML文档并构建一个DOM(Document Object Model)树。DOM是一种将XML文档结构化为节点树的...

    msxml4.tlh和msxml4.tli

    这两个文件在VC++(Visual C++)编程环境中用于支持XML处理,使开发者能够直接在代码中调用MSXML2库中的函数和接口,从而实现对XML文档的操作。 MSXML是微软提供的一个API,它允许开发者在各种应用中解析、创建和...

Global site tag (gtag.js) - Google Analytics