网络编程
位置:首页>> 网络编程>> JavaScript>> 在Internet Explorer中正确使用MSXML

在Internet Explorer中正确使用MSXML

 来源:SQL中国研发中心 发布时间:2009-02-22 18:41:00 

标签:IE7,浏览器,msxml,dom

我参与了IE7的开发过程,看到了在IE浏览器中形形色色使用MSXML的方法。显然有一些东西困扰着开发者:MSXML“混乱”的版本以及如何创建“正确”的实例。下面是一段非常常见的代码:


if (Web.Application.get_type() == Web.ApplicationType.InternetExplorer) {

  var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.5.0', 'Msxml2.DOMDocument.4.0',
                 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ];

  // MSXML5.0、MSXML4.0以及Msxml2.DOMDocument都存在问题

  for (var i = 0; i < progIDs.length; i++) {

    try {

      var xmlDOM = new ActiveXObject(progIDs[i]);

      return xmlDOM;

    } catch (ex) {

    }

  }

  return null;

}

以上代码遍历progIDs数组并且实例化客户端版本最高的MSXML DOM然后返回给调用者。这段代码暗含:

  • 兼容性
    我们尽力保持各个版本MSXML直接的兼容性,不过,他们之间仍然有不少差别。MSXML 3和MSXML 4是在XML拓荒期时实现的,从中我们学习到了许多经验。MSXML 5是为微软Office产品量身定做的。有时候我们不得不在不同版本上修改某些设计与实现。依次遍历不同的MSXML版本将更容易遇到不期而遇的由于版本行为差异引起的问题。

  • 健壮性
    由于资源有限,我们不可能修复每个版本中的每个缺陷,于是我们针对性地把资源集中于MSXML 6(最新版本)和MSXML 3(最广泛使用的版本)。

  • 测试成本
    依赖越多的MSXML版本意味着发布你的应用程序之前需要越多的测试。

在这篇文章中我将简要给出MSXML的历史、生命周期以及版本,通过一个例子提供网络中使用MSXML的最佳实践的细节,以及一些需要注意的地方。

如果你想阅读完整的故事,那么请继续阅读下文;否则,请参考下面四个条目以快速掌握梗概:

  • 使用MSXML 6。它随着Vista发布,也提供在Win2k、XP和2003的安装包。它最安全、性能最好、可靠性最好、最符合W3C标准。

  • MSXML 3是我们最推荐的替补——从Win2k SP4开始,你几乎可以在所有操作系统上找到它。你几乎不用考虑软件发布的问题。而且它经常随着操作系统升级。

  • MSXML 4是七年前发布的,不过,现在已经被MSXML 6取代,应该仅仅用于支持旧版应用程序(legacy applications)。

  • MSXML 5是为微软Office量身定做,并不是为普通的开发而设计的。Internet Explorer 7在Internet Zone默认不会直接运行MSXML5——当你尝试实例化MSXML5时IE会跳出提示栏。此外,只有安装了Office 2003及以上的系统会有MSXML5。总之,应该尽量避免在网络应用中使用MSXML5。

  • 事实上,MSXML5 组件是默认关闭的。

MSXML生命周期和历史

说来话长,不如让我们回顾不同版本的MSXML、发布背景以及定位。

让我们的客户把他们的应用程序移植到MSXML6上去是我们的最终目标。说到发布,MSXML 6将随着操作系统一起发布,这样网页作者以及软件开发人员都可以方便地使用这个部件而不用考虑发布的问题。不过,由于客户需要在所有微软支持的操作系统上使用同样的XML API,我们仍然需要一种方法使得新的XML技术可以应用到较低版本的操作系统(Win2k、Win XP和Win2k3)中。

MSXML 6已经随着Vista一起发布,不过对于以前的操作系统,则需要单独安装发行包。我们希望MSXML6与较低版本的操作系统的下一个Service Pack一起发布,但是我们需要足够的商业需求才可以这样做。所以,我们的近期和中期计划是仍然保持发布一个可以安装在较低版本操作系统上的MSXML6 可再发行组件包(Redistributable Package)。在以后的博文中,我们会详细讲述迁移到MSXML6的好处。

虽然我们希望今天每个人都在使用MSXML6,但仍然清醒地意识到迁移需要相当的时间。所以我们将继续在MSXML3上投入资源以支持现有的应用程序以及满足那些需要零发布需求。虽然MSXML3并不具有MSXML6的新特性,不过MSXML3仍然不失为一个稳定而强健的XML平台。MSXML3已经随着Win2000 SP4以及以上的操作系统一起发布,对于应用程序而言可以说无需考虑发布的问题。以后,MSXML3的更新将会随着每种操作系统的Service Pack一起发布。 MSXML3 SP7 是最后一个以可再发行组件包形式发布的MSXML3 Service Pack。以后,我们的合作伙伴和客户将不会有使用MSXML3更新的可再发行组件包的需求。

MSXML4是MSXML6的前身,不过并不曾随着操作系统发布。就稳定性、安全性、W3C标准以及与System.Xml的兼容性而言,MSXML6是一个巨大的进步。此外,MSXML6还提供64位版本。目前,我们主要在MSXML6和MSXML3上投入精力,所以我们希望用户尽可能迁移到MSXML6,或者根据需要迁移到MSXML3。

最后,如果不是针对Microsoft Office 2003或者Microsoft Office 2007编写程序却使用MSXML5的开发者,应该尽快迁移到MSXML6。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com