动态HTML(DHTML)技术——实际上是多项技术的组合,包括CSS、DOM和JavaScript——为Web设计者提供了多种选择,能让他们向其网页中添加动态菜单和各种导航的小玩意。但是,这些技术也带来臃肿的代码,导致浏览器互不兼容的问题和向老平台移植性的丢失。简而言之,用于HTML代码编写的动态选择越多,出现错误代码的可能性也就越大。但是只要遵照一些简单的编写原则,你可以保证自己代码的健壮性和高度的可移植性,而不用放弃对DHTML创新技术的巨大依赖。
浏览器互不不兼容是一个困扰Web开发人员多年的问题。但是在很多方面,随着浏览器和标示语言两者复杂性的增加,人们对其兼容性的关注有所减少。然而,有些结构上的冲突的确还在,尤其在你必须考虑自己页面的可访问性的时候。
例如,不是能够在Windows平台上运行的所有Netscape Navigator和Internet Explorer特性都能运行在Mac和UNIX系统上。而且不是所有能够运行在Internet Explorer 4.0上的HTML 4.0代码都可以运行在Navigator 4.0。(Navigator 4.0不支持HTML 4.0所有弹出文本的特性。)而且,<BUTTON>标签对Navigator也不友好,诸如此类等等。这个互不兼容的单子很长,即便到现在也是如此。所以除了浏览器探测技术,你现在必须还要能够使用HTML、XHTML和CSS确认等。
跨平台所导致的错误是对健壮代码的一个重大威胁,但是向后兼容会更严重。尽管软件巨人们都在花大力气推广新版本,但是Internet Explorer和Netscape Navigator两者4.0以前的版本仍在大行其道,所以你的代码应该要能在其上运行——即使你使用的是DHTML的代码。
缩减功能的概念在软件工程中十分常见,它是指对逐渐失效而非突发性失效有所准备。其主旨就是设计一种机制,让相当一部分功能能在不同环境导致性能降低的情况下获得保留。这个概念还被相当多地用于软件,谨慎的开发人员会预计有缺陷的运行条件,并按照部分功能在碰到错误的时候得到保护的方式编写应用程序代码。
在编写Web应用程序代码的时候这一点尤其重要。想一想吧:任何对Internet世界开放的Web页面都需要运行在任何版本、任何数量的浏览器上。由定义可知,没有什么HTML代码能够运行在所有的浏览器上;错误是不可避免的。Java在低于版本3的浏览器上运行时会出问题。对象模型特性在跨当前不同浏览器时会不稳定。有些版本的Navigator只有使用插件才能正常处理ActiveX。当前不同的浏览器对层叠样式表(CSS)的支持也不尽相同等等。这个问题清单也很长。
有合格的设计者不仅应该为每个Web应用程序创建强健的错误处理机制,这要尽量多地考虑环境变化和潜在不兼容性的问题,还应该让应用程序的代码在碰到问题时能够保证更多的功能。