浏览器兼容性问题及解决方案.docx
《浏览器兼容性问题及解决方案.docx》由会员分享,可在线阅读,更多相关《浏览器兼容性问题及解决方案.docx(22页珍藏版)》请在三一办公上搜索。
1、浏览器兼容性问题及解决方案 1 / 16 浏览器兼容新问题 W3C对标准的推进,Firefox,Chrome,Safari,Opera的出现,结束了IE雄霸天下的日子。 然而,这对开发者来说,是好事,也是坏事。 说它是好事,是因为浏览器厂商为了取得更多的市场份额,会促使各浏览器更符合W3C标准,而得到更好的兼容性,并且,不同浏览器的扩展功能(例如 -moz,-webkit开头的样式),对W3C标准也是个推进;说它是坏事,因为,多个浏览器同时存在,这些浏览器在处理一个相同的页面时,表现有时会有差异。这种差异可能很小,甚至不会被注意到;也可能很大,甚至造成在某个浏览器下无法正常浏览。我们把引起这些
2、差异的问题统称为“浏览器兼容性问题”。而正是这些“浏览器兼容性问题”,无形中给我们的开发增加了不少难度。 从浏览器内核的角度 来看,浏览器兼容性问题可分为以下三类: 1. 渲染相关:和样式相关的问题,即体现在布局效果上的问题。 2. 脚本相关:和脚本相关的问题,包括JavaScript和DOM、BOM方面的问题。对于某些浏览器的功能方面的特性,也属于这一类。 3. 其他类别:除以上两类问题外的功能性问题,一般是浏览器自身提供的功能,在内核层之上的。 例如下面的页面,是一个渲染相关的问题: 在各个浏览器中都表现的不同,这就属于兼容性问题。 造成浏览器兼容性问题的根本原因就是浏览器各浏览器使用了不
3、同的内核,并且它们处理同一件事情的时候思路不同。 现今常见的浏览器及其排版引擎及脚本引擎,如下: 2 / 16 而造成浏览器兼容性问题的常见原因则是设计师写出了不规范的代码,不规范的代码会使不兼容现象更加突出。 例如: 不规则的嵌套: HTML code 新闻标题一 新闻标题一 新闻标题一 DIV 中直接嵌套 LI 元素是不合标准的,LI 应该处于 UL 内。此类问题常见的还有 P 中嵌套 DIV, TABLE等元素。 不规范的DOM接口和属性设置: JScript code document.all.a_name.style.top=35; 上面代码中top的值,其实应该是一个字符串值,需有
4、单位。例如:35px。 总之,人为的原因也占很大一部分。而人为造成兼容性问题的原因,除了粗心之外,大都源于浏览器bug的存在,和开发者对标准的不了解。 比如,如果要做一个功能,功能是想让鼠标悬停在 IMG 元素上方时,可以出现提示信息,经常针对 IE 做开发的人,可能会使用 IMG 元素的 “alt” 属性,但其他浏览器中就是不给 alt 属性面子。因为 W3C 标准中规定要去做这件事的属性是 ”title“,大多浏览器符合标准,IE 不符合,这是 IE 浏览器内核的问题;开发者不知道 ”title“ 才是正解,不遵循标准去写代码,是开发者的问题。所以,一个问题分两半,浏览器和开发者都有责任。
5、 既然都有责任,就都有义务去解决兼容性问题。那么,从浏览器的角度来讲,它的厂商应该修复浏览器的bug和不合标准的地方,当某一天 IE 的 ”alt“ 不能用于提示了,还有人用这个错误的属性去显示提示么? 从开发者角度来讲,多了解标准,了解浏览器兼容性问题,就可以在开发的过程中,有效的避开兼容性问题,让你的页面在所有浏览器中畅通无阻。 废话少说,下面就讲讲如何有效的避免一些兼容性问题。 JAVASCRIPT.4 3 / 16 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. HTML对象获取问题 .5 const问题 .5 event.
6、x与event.y问题 .5 window.location.href问题 .5 frame问题 .5 模态和非模态窗口问题 .6 firefox与IE的父元素(parentElement)的区别 .6 document.formName.item(”itemName”) 问题.6 集合类对象问题.6 自定义属性问题.7 input.type属性问题 .7 event.srcElement问题 .7 body载入问题.7 事件委托方法 .8 Table操作问题 .8 对象宽高赋值问题 .8 CSS .8 1. 2. 3. 4. 5. 6. cursor:hand VS cursor:point
7、er .8 innerText在IE中能正常工作,但在FireFox中却不行. .8 CSS透明 .9 css中的width和padding.9 FF和IE BOX模型解释不一致导致相差2px .9 IE5 和IE6的BOX解释不一致 .9 4 / 16 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ul和ol列表缩进问题 . 10 元素水平居中问题 . 10 Div的垂直居中问题. 10 margin加倍的问题. 10 IE与宽度和高度的问题 . 11 页面的最小宽度. 11 DIV浮
8、动IE文本产生3象素的bug . 11 IE捉迷藏的问题. 12 float的div闭合;清除浮动;自适应高度 . 12 高度不适应 . 13 IE6下图片下有空隙产生 . 14 对齐文本与文本输入框 . 14 LI中内容超过长度后以省略号显示 . 14 为什么web标准中IE无法设置滚动条颜色了 . 15 为什么无法定义1px左右高度的容器. 15 链接(a标签)的边框与背景 . 15 超链接访问过后hover样式就不出现的问题 . 16 FORM标签 . 16 属性选择器(这个不能算是兼容,是隐藏css的一个bug) . 16 为什么FF下文本无法撑开容器的高度. 16 JAVASCRIP
9、T 5 / 16 1. HTML对象获取问题 FireFox:document.getElementById(idName); ie:document.idname或者document.getElementById(idName). 解决办法:统一使用document.getElementById(idName); 2. const问题 说明:Firefox下,可以使用const关键字或var关键字来定义常量; IE下,只能使用var关键字来定义常量. 解决方法: 统一使用var关键字来定义常量. 3. event.x与event.y问题 说明:IE下,event对象有x,y属性,但是没有pa
10、geX,pageY属性; Firefox下,event对象有pageX,pageY属性,但是没有x,y属性. 解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX. 4. window.location.href问题 说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href; Firefox1.5.x下,只能使用window.location. 解决方法:使用window.location来代替window.loc
11、ation.href. 5. frame问题 以下面的frame为例: (1)访问frame对象: IE:使用window.frameId或者window.frameName来访问这个frame对象. frameId和frameName可以同名。 6 / 16 Firefox:只能使用window.frameName来访问这个frame对象. 另外,在IE和Firefox中都可以使用window.document.getElementById(frameId)来访问这个frame对象. (2)切换frame内容: 在 IE和Firefox中都可以使用window.document.getEle
12、mentById(testFrame).src = xxx.html或window.frameName.location = xxx.html来切换frame的内容. 如果需要将frame中的参数传回父窗口(注意不是opener,而是parent frame),可以在frame中使用parent来访问父窗口。例如:parent.document.form1.filename.value=Aqing; 6. 模态和非模态窗口问题 说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能. 解决方法:直接使用window
13、.open(pageURL,name,parameters)方式打开新窗口。 如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener; parWin.document.getElementById(Aqing).value = Aqing; 7. firefox与IE的父元素(parentElement)的区别 IE:obj.parentElement firefox:obj.parentNode 解决方法: 因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择
14、. 8. document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document.formName.elements elementName;Firefox 下,只能使用document.formName.elementselementName。 解决方法:统一使用document.formName.elementselementName。 9. 集合类对象问题 7 / 16 问题说明:IE下,可以使用 或 获取集合类对象;Firefox下,只能使用 获取集合类对象。 解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浏览器 兼容性问题 解决方案

链接地址:https://www.31ppt.com/p-3631374.html