首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.4  跨浏览器开发简介

了解不同的浏览器、了解它们的能力或者仅仅知道它们的存在,对于跨浏览器开发来说都有帮助。跨浏览器开发可能是最激动人心的编程原则,但是“激动人心”对于编程本身来说并不总是好事。麻烦的是在跨浏览器开发时,在一些情况下要多次编写十分相似的子程序。对我来说,编写一个子程序并调试成功是很令人满意的事情,但在跨浏览器开发当中,子程序在某个浏览器环境下调试成功只能说是完成了一半的工作。

跨浏览器开发存在的主要问题是在某个浏览器中存在某个“特性”,而在其他浏览器中却不存在或者是语法不相同。可以想象一下,当刚刚为解决了一个在Firefox中的棘手问题而高兴时,同一个页面却在IE当中意外地崩溃了,这时会让人感觉很痛苦。例如,在Firefox中XML的序列化可以很好地工作,可是到了IE中一切都变得很古怪了。

为了防止这种情况的出现,了解发生这种现象的原因是必要的,但首先还是了解一下如何建立一个安全的环境,比如说布尔型、数值型、字符串型等标准数据类型是相当安全的,同样的流控制语句和赋值语句也是安全的。

而糟糕的是(至少我这么认为),对象和事件处理子程序往往是问题之所在。在遇到它们之前,一切运行得都很好,突然间页面就出现了明显的错误或者干脆就无法工作了。幸运的是,只要掌握一定的知识并且事先计划过,就有可能避免这些由于标准不统一引起的编程问题。

1.4.1  浏览器大战的牺牲品

在第2个浏览器出现时,第一个牺牲品也就产生了,这就是浏览器之间的兼容性问题。在发展的早期,为了取得竞争的优势,浏览器开发者们急于给浏览器加上新的特性,或者急于追赶领先者,他们显得匆忙而散漫,无暇去考虑如何正确地开发一个浏览器。

因此,尽管大部分的浏览器都有着相同的功能,但是实现的方法却各不相同。让我们来看看XMLHttpRequest对象在IE中和诸如Firefox之类的基于Gecko的浏览器当中是如何实现的。作为第一个实现这个对象的浏览器,IE将它作为一个ActiveX的组件,也就是说,如果要在IE中创建一个该对象的实例,应使用如下的语法:

var objXMLHTTP = new ActiveXObject('Microsoft.XMLHTTP');

而在Firefox当中,将采用如下语法:

var objXMLHTTP = new XMLHttpRequest();

造成这种区别的原因是,ActiveX是微软公司专有的技术,这意味着使用它必须从微软公司取得价格不菲的许可证,所以必须要寻找一种替代的方法。当这种方法找到后,就会成为所有非微软公司浏览器所遵从的标准。

1.4.2  市场份额不代表一切

当我谈及专利技术的时候,必须指出市场份额不代表一切。拥有最高市场份额的公司,往往对威胁视而不见,直到一切都无法挽回,这种事例在历史上比比皆是。现在还有谁记得Digital Research的CP/M操作系统?当计算机还只有64KB内存的时代,它是最主要的操作系统。在操作系统还看不到前景的时候,它占有着一半以上的市场。

在IBM PC推出时,操作系统有3种选择:CP/M、PC DOS和UCSD D-PASCAL。那时候几乎所有人都认为,CP/M将很快迎来美好的前景,不幸的是,因为MS-DOS的价格在50美元以下,市场份额最终屈从于经济压力,微软公司最终成为操作系统的霸主,而Digital Research则只能在历史舞台上黯然谢幕。

1.4.3  维和部队——万维网联盟(W3C)

随着浏览器大战愈演愈烈,人们感觉到浏览器正在步步走向危险,以至于万维网联盟只能在后面紧追不舍。推荐标准的发表居然是在新特性推出之后,这真是本末倒置。这就不难解释前面介绍的XMLHttprequest对象所发生的问题了。

尽管现在大战可能还没有结束,但至少给了我们一个喘息的机会,这也给了W3C一个取得领先地位的机会。不幸的是,大战已经造成了很大的损害,我们被迫在不同的浏览器环境下重复编写只有微小不同的代码。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论