`
jdhh_hcm
  • 浏览: 11702 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

浏览器兼容性问题综述--正确的认识浏览器兼容性问题(转载)

阅读更多

原文地址:http://topic.csdn.net/u/20100701/14/ed652911-7128-48f6-b8e0-1f2d1b3abd47.html

向作者致敬!

 

W3C对标准的推进,Firefox,Chrome,Safari,Opera的出现,结束了IE雄霸天下的日子。

  然而,这对开发者来说,是好事,也是坏事。

  说它是好事,是因为浏览器厂商为了取得更多的市场份额,会促使各浏览器更符合W3C标准,而得到更好的兼容性,并且,不同浏览器的扩展功能(例如 -moz,-webkit开头的样式),对W3C标准也是个推进;说它是坏事,因为,多个浏览器同时存在,这些浏览器在处理一个相同的页面时,表现有时会有差异。这种差异可能很小,甚至不会被注意到;也可能很大,甚至造成在某个浏览器下无法正常浏览。我们把引起这些差异的问题统称为“浏览器兼容性问题”。而正是这些“浏览器兼容性问题”,无形中给我们的开发增加了不少难度。

  从浏览器内核的角度 来看,浏览器兼容性问题可分为以下三类:
  1. 渲染相关:和样式相关的问题,即体现在布局效果上的问题。
  2. 脚本相关:和脚本相关的问题,包括JavaScript和DOM、BOM方面的问题。对于某些浏览器的功能方面的特性,也属于这一类。
  3. 其他类别:除以上两类问题外的功能性问题,一般是浏览器自身提供的功能,在内核层之上的。

  例如下面的页面,是一个渲染相关的问题:

  在各个浏览器中都表现的不同,这就属于兼容性问题。

  造成浏览器兼容性问题的根本原因就是浏览器各浏览器使用了不同的内核,并且它们处理同一件事情的时候思路不同。

  现今常见的浏览器及其排版引擎(又称渲染引擎)及脚本引擎,如下:


  而造成浏览器兼容性问题的常见原因则是设计师写出了不规范的代码,不规范的代码会使不兼容现象更加突出。

  例如:
  不规则的嵌套:

HTML code
div> <li>新闻标题一</li> <li>新闻标题一</li> <li>新闻标题一</li> </div>

DIV 中直接嵌套 LI 元素是不合标准的,LI 应该处于 UL 内。此类问题常见的还有 P 中嵌套 DIV, TABLE等元素。

  不规范的DOM接口和属性设置:

JScript code
document.all.a_name.style.top=35;

上面代码中top的值,其实应该是一个字符串值,需有单位。例如:35px。

  总之,人为的原因也占很大一部分。而人为造成兼容性问题的原因,除了粗心之外,大都源于浏览器bug的存在,和开发者对标准的不了解。

  比如,如果要做一个功能,功能是想让鼠标悬停在 IMG 元素上方时,可以出现提示信息,经常针对 IE 做开发的人,可能会使用 IMG 元素的 “alt” 属性,但其他浏览器中就是不给 ‘alt’ 属性面子。因为 W3C 标准中规定要去做这件事的属性是 ”title“,大多浏览器符合标准,IE 不符合,这是 IE 浏览器内核的问题;开发者不知道 ”title“ 才是正解,不遵循标准去写代码,是开发者的问题。所以,一个问题分两半,浏览器和开发者都有责任。

  既然都有责任,就都有义务去解决兼容性问题。那么,从浏览器的角度来讲,它的厂商应该修复浏览器的bug和不合标准的地方,当某一天 IE 的 ”alt“ 不能用于提示了,还有人用这个错误的属性去显示提示么? 从开发者角度来讲,多了解标准,了解浏览器兼容性问题,就可以在开发的过程中,有效的避开兼容性问题,让你的页面在所有浏览器中畅通无阻。

  废话少说,下面就讲讲如何有效的避免一些兼容性问题。

  概括来说,避免兼容性问题的有效途径就是:正确的使用 DTD,书写符合 W3C 规范的代码。

  那什么叫做 DTD 呢,DTD是做什么的和为什么要写DTD呢?DTD 是 Document Type Definition 的缩写,是文档类型定义。定义上说“此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范”。

  那其中所说的规范又是什么呢?我们平时所说的规范大部分情况下就指的是 W3C 制定的规范,做WEB前端开发的时候主要接触其中的HTML、CSS、DOM、XML部分。顺便说一下,W3C的网站现在已经提供可校验HTML和CSS 代码的工具了,不知道的同学可以看一下:http://validator.w3.org/ 这个是校验HTML和XHTML的,http://jigsaw.w3.org/css-validator/ 这是校验CSS样式表的。

  DTDW3C校验浏览器解析 之间有啥关系?简单地说:W3C校验将检查DTD与文档内容是否匹配;浏览器将根据DTD决定启用何种渲染模式。

  后面半句就是说,写了正确的DTD,浏览器就会按照标准方式(Standards mode)渲染和解析你的页面,那如果不写或者写错呢,那浏览器就会使用怪癖模式(Quirks mode)来渲染和解析你的页面。怪癖模式的产生的主要原因大概是为了向后兼容,就是为了使那些很早之前(IE 6之前的时代)的网页看上去跟原来的样子差不多。

下面有一个直观的例子。

其中,牌子是DTD,水果什么的是文档真实内容,对号和差是W3C代码检测,动植物是浏览器模式。

这是我们写的代码:

W3C校验将检查DTD与文档内容是否匹配,发现有的对不上号,会给出提示:

浏览器运行的时候,浏览器将根据DTD决定启用何种渲染模式,不会管你写的正确与否,按照你写的方式渲染:


  如何判断一个DTD是写得对不对?或者想知道现在的DTD在各个浏览器下到底会触发哪种渲染模式?来这里http://hsivonen.iki.fi/doctype/ 核对一下就行。网页的靠下部分有个红红绿绿的表,自己对照一下好了。

  另外补充两点个人经验:
  1. 正确的使用DTD,并书写符合W3C规范的代码,虽然现在你即使做到这两点也不能保证所有浏览器都会表现一直,但可以最大程度上避免很多兼容性问题。 
  2. 推荐使用 HTML5 的 DTD,好写好记:<!DOCTYPE html>,可以触发各浏览器的 Standards Mode。

  但是,问题又来了,这样做一定就能解决问题了吗? 不一定,但是这样可以避免很多问题。比如,IE的盒模型bug等,都可以通过此手段避免。另外有一些是浏览器的bug,无法解决的。比如,在Firefox中,TABLE 里的绝对定位元素的定位问题,再比如IE早期版本对 ‘!important’ 的支持缺陷等。

  这时候,就要采取一些非凡的手段了。

  一种是在JS里用浏览器判断,针对不同的浏览器做不同的处理;另一种,CSS hack。

  在使用CSS hack 的时候注意,CSS hack一定要是丑陋的,时刻提醒自己,那是不得已而为之的解决方式。
 
  总而言之,正确的使用DTD、并书写符合W3C规范的代码 + 使用其他手段……,这些都不能完全避免浏览器的不兼容问题。

  浏览器兼容性问题的“解决”需要浏览器开发商、W3C、开发者共同的努力才能实现。

  而作为开发者,我们要做的,就是尽量了解标准,熟悉各浏览器的Bug和特性,灵活设计页面功能,才可以避免出现浏览器兼容性问题。

分享到:
评论

相关推荐

    WebKit和Chromium源码及原理剖析.pdf

    - 注意私有API可能存在不稳定性和版本兼容性问题。 #### 第22篇 iOS WebCore的WebEvent和EventHandler - **WebEvent和EventHandler概述**: - `WebEvent`和`EventHandler`是WebKit中用于处理用户交互事件的核心...

    在线考试系统开题报告

    - **兼容性问题**:解决不同浏览器之间的兼容性问题,保证用户体验一致。 #### 四、用户注册与登录功能实现 - **用户注册**:用户可以在系统中注册账号,填写必要的个人信息,如用户名、密码等。 - **登录验证**...

    临床统一视图系统用户操作手册.pdf

    - 环境要求:使用系统前,用户需了解并满足硬件、软件及网络环境的基本要求,如操作系统版本、浏览器兼容性等。 2. 软件配置 - 软件安装:手册将详细介绍系统的安装过程,包括下载、安装、设置和启动等步骤,确保...

    spring-boot-reference-guide-zh

    - **Servlet容器**:Spring Boot支持的Servlet容器类型及其兼容性。 - **安装指南**: - **Maven安装**:通过Maven引入Spring Boot依赖的方式及注意事项。 - Maven安装步骤详解。 - **Gradle安装**:通过Gradle...

    高校教材管理系统文献综述

    - **系统兼容性**:确保系统在不同操作系统和浏览器上的稳定运行。 - **数据安全性**:防止非法访问和数据泄露,保障信息安全。 - **性能优化**:随着用户数量的增加,需要不断优化系统性能,确保响应速度和服务质量...

    js -- 跨域问题.doc

    最大特点是简单适用,兼容性好,可以兼容低版本IE。缺点是只支持GET请求,不支持POST请求。 JSONP的核心思想是网页通过添加一个Script元素,向服务器请求JSON数据,服务器收到请求后,将数据放在一个指定名字的回调...

    hypermill2012教程

    - **兼容性**:阐述了hyperMILL与其他CAD系统的兼容性情况。 - **协作**:如何利用这些兼容性来优化工作流程。 **2.3 启动应用程序** - **步骤**:详细步骤说明如何启动hyperMILL 2012程序。 - **注意事项**:首次...

    生产性实训系统 使用说明书

    - **支持软件**:Windows 98及以上操作系统,需安装Silverlight插件和兼容浏览器(如IE6.0以上、Firefox等)。 - **数据结构**:需要SQL Server 2005或更高版本数据库支持。 #### 五、系统操作说明 - **互动平台**...

    AJAX技术及应用综述.pdf

    3. **丰富性和可达性**:AJAX应用提供了类似桌面应用的交互体验,可以在单个页面上展示所有数据,无需频繁跳转,且基于标准的浏览器技术,跨平台兼容性好,无需额外的插件或客户端软件。 4. **节约资源**:AJAX能将...

    超精华系统故障集(附案例)

    - 提供了一个更广泛的视角,包括但不限于硬件兼容性问题、驱动程序错误等。 **5. 13种BIOS报错信息及排除方法** - 详细列举了13种常见的BIOS错误信息,并提供了具体的解决方案。 **6. 上网易出现错误信息的分析*...

    互联网软件应用与开发综述.doc

    在评估项目规模时,需考虑**项目估价**,包括功能分析、选择合适的站点模型、浏览器兼容性、内容规划和用户重点。**项目管理员**应具备规划、估算、追踪和沟通的技能,而**客户**的角色包括决策、发起、专家咨询和...

    实验室信息管理系统操作手册.pdf

    - 生成Word文档时切换至浏览器兼容模式 - 安装Office 2007软件 #### 2. 系统综述 - **系统简介** - **系统目的**:LIMS系统旨在提供一个全面覆盖实验室管理流程的信息管理平台,实现业务规范化、数据信息化,以...

    个人毕业设计创建文档及相关查询路径

    - **兼容性测试**:包括跨平台测试、浏览器兼容性测试等。 - **界面和用户体验测试**:包括UI测试、可用性测试等。 #### 5. 总结展望 - **总结**:回顾项目实施过程中的关键点,总结成功经验和不足之处。 - **展望...

    使用python开发前端.pptx

    例如,不成熟的浏览器、Html/Js/Css 等技术的不断发展、Javascript 自身的缺陷、各种浏览器兼容问题、第三方组件兼容性问题等。这些困惑对前端开发人员提出了挑战。 六、结论 Python 在前端开发中发挥着重要作用。...

    大型网络软件综合课程

    最后,对软件进行功能测试、性能测试和兼容性测试,确保其满足预期的性能和稳定性,并分析测试结果,找出问题并进行改进。 总之,这门课程不仅关注理论知识,更强调实践操作,通过实际的浏览器开发项目,让学生全面...

    住院信息管理系统的可行性研究分析报告

    - **兼容性需求**:支持主流操作系统及浏览器。 - **扩展性需求**:易于升级与维护。 **2.2 目标** - 提高医疗服务效率,缩短患者等待时间。 - 减少人为错误,提高数据准确性。 - 实现资源优化配置,降低运营成本...

    基于python的在线水果销售系统源码数据库.doc

    - **兼容性**:支持多种浏览器和设备,确保不同用户都能正常使用系统。 #### 六、测试与评估 为了确保系统的稳定性和可靠性,在开发完成后需要进行全面的测试,包括单元测试、集成测试和系统测试。通过模拟真实...

    SAPUI5 Learning

    - **降级表现**:文档中列举了一些基于功能的降级表现以及基于控件的降级表现,这些信息对于确保应用程序在不同浏览器上的兼容性非常重要。 - **对于移动端**:SAPUI5 同样支持多种移动设备上的浏览器,确保了跨...

    Wrox.Professional.SharePoint.2010.Administration

    - **兼容性问题处理**:解决在升级过程中可能出现的兼容性问题。 - **测试与验证**:确保升级后的环境正常运行并达到预期的效果。 #### 6. 使用新的中央管理工具(Chapter 6) - **中央管理的功能**:介绍新的中央...

    AcDown动漫下载器 v3.3源码

    AcDown动漫下载器 v3.3源码 综述 AcDown动漫下载器是一个免费的下载器,支持从非常多个站点下载以动漫为主的多媒体资源,支持的网站包括Acfun、... 修复了Windows 8系统下的兼容性问题 修复了下载核心的大量Bug

Global site tag (gtag.js) - Google Analytics