`
byf157
  • 浏览: 207915 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

转:浏览器兼容

 
阅读更多

写了一个多月JS,感觉如今可不比几年前只有IE6的年代,而且过去只是用JS写个Ajax或者是简单的表单验证,可如今写一个稍微复杂点的小应用,要兼容所有浏览器,才发现真是太难了,难怪FE是一个独立的工种,有别于我们这些Java工程师了。
  如果你也不是专业FE,那么估计也会跟我一样在这些地方翻船,或许你所遇到的情况比我这些还多,那么欢迎补充。
1 首先是最简单的select标签,就有诸多不兼容:
  A、 cloneNode方法,对于非IE浏览器没有问题,对于IE浏览器,我遇到的问题包括:
  1)option selected的会clone不过去,然后会将第一个option作为selected值
  2)事件clone也会有问题
  B、Readonly:对于IE6,可以通过以下方法将select设为readonly:
  obj.onbeforeactive=function(){return false}
  obj.onfocus=function(){obj.blur();}
  obj.onmouseover=function(){obj.setCapture();}
  obj.onmouseout=function(){obj.releaseCapture();}
  对于其他浏览器,我采用的是元素替代法,动态创建一个input标签,把值赋给它,然后将select隐藏。
  C、select的z-index对于IE6无效,网上有很多关于这个讨论,JQuery采用一个iframe搞定
  D、动态添加option的方法不同,这个网上一搜一大堆
  E、对于onclick和onchange的响应不同,在FF下可以在onclick select时动态读取option值然后构建option,然后选中一个值后执行onchange事件,但是IE下不能这样做。
2 css对offsetWidth之类的理解不同
  http://newleague.iteye.com/blog/765535
3 对于vertical-align baseline的理解不同:
  http://w3help.org/zh-cn/causes/RD1016
4 设置背景色
  element.style.backgroundColor
  在firefox下想改变颜色,必须先设为null,再设为其他颜色才行,即先取消原来的颜色。
  在IE下,想取消颜色,必须设为''才行,而换其他颜色,无需先去掉之前的颜色,而如果你设成了null,反倒不行了。
5 不同浏览器去padding的理解不同
6 不同浏览器对强制换行和强制不换行的理解不同:
  http://www.cftea.com/c/2009/01/QPDZU40MNW8FYYG3.asp
  最恶心的是对于IE6,如果是<td><span>我是蚊子</span></td>,那么在td上写了word-break:keep-all依然无效,必须在span上也写。
7 获得head节点的方式不同
  在Firefox下可以用window.head,而所有浏览器都兼容的方式是document.getElementsByTagName('head')[0]
8 往head上添加css code的方法不同,也就是动态添加<style>标签。
  IE下可以用var style=document.createStyleSheet();style.cssText=cssCode;
  而有文章说,在Windows上的IE,用createStyleSheet返回的是styleElement的styleSheet,而在Mac上返回的是styleElement自己。
   在其他浏览器下需要document.createElement('style');
   然后还有区分是否具有styleSheet属性。
   这个很容易搜到。
9 对于onchange事件,firefox浏览器可以注册在table,div等组件上,然后通过冒泡,拦截input,select等发出的事件,而IE不行,必须绑定到相应的组件上
10 将input设为readonly=true,其依然会响应keypress,keyup,keydown,onblur事件
11 IE和非IE对于停止冒泡和取消默认行为的方法不同
12 大家都知道IE和非IE在动态添加事件时使用的方法不同,IE是attachEvent,其他是addListener,然后参数也不同。更重要的是如果一个控件绑定了多个function,他们绑定和执行的顺序是不同的,IE是跟绑定顺序相反,其他是跟绑定顺序相同
13 获得当前事件不同,一个是window.event一个是直接接受event
14 FF下执行offset系列非常慢,但是IE下比较快,而IE的改变CSS的执行非常慢。
   Firefox6比Firefox3.6速度快的多,相差好几百倍(针对一个400行*50列的表格的JS处理)
15 如果大量动态改变css,那么使用document.createDocumentFragment,然后将需要修改样式的Dom获取出来appendChild到这个临时的fragment上,修改完css后再append回去即可,这样性能能差好几百倍。
16 浏览器加载网页时,顺序读取html,遇到外部js链接会读进来,然后按顺序执行,边解释边执行,而对于外部css,图片等则是启动另外的线程连接服务器去获取。
   IE对于CSS引入有限制,我没试过,但有篇文章讨论:http://blog.csdn.net/ydshang/article/details/4158211
17 表格定位某一行,可以通过改变scrollTop来实现,当然如果出现了滚动条的话
18 IE的Dom用完要记得释放,可以在unload方法中,否则会出现内存泄露
19 unload方法在各个浏览器里各不相同,我之前的文章里有介绍。http://sslaowan.iteye.com/blog/1128209
20 我知道了为什么FE最喜欢的浏览器是FF,最讨厌的是IE6,恨不得IE6去死,其他IE也不怎么样。但是Chrome,Opera也各有各的bug
21 Ajax当使用同步模式时,如果访问的链接是错误的,那么FF会在控制台报错,而IE会直接弹出个对话框,然后就崩溃了。
22 FF支持document.getElementsByClass等方法,IE不支持,可以自己写一个。
23 trim方法在IE和FF下不同,需要自己写一个,可以用正则表达式
24 动态设置元素的css class在IE和非IE浏览器下也不同
25 有时本地字体库会影响你的字体,大小等显示,但是有时甚至会影响你的布局
26 字符串也可以使用><等符号比较大小,但是是字符串比较,不要被骗了。
27 JS中this问题非常让人困惑
28 判断浏览器可以有很多方法,主流是两大类,agent判断法和特性法,后者好像更推荐
29 JS是面向对象语言,对象.属性=值 只影响当前对象,而对象.prototype.属性则影响整个类。非IE浏览器可以覆盖DOM对象的类方法,但是IE不行。
30 getComputedStyle,获得外部添加的css,FF支持,IE不支持,具体看这篇文章http://www.jb51.net/article/16128.htm
31 IE和Chrome支持outerHTML方法,其他浏览器没有。相关讨论:http://walsh.iteye.com/blog/261966http://stackoverflow.com/questions/1700870/how-do-i-do-outerhtml-in-firefox

 32 还有一个特悲剧的,IE下会把document.[formname.]控件Id当成那个控件,如果把一个控件比如input的id设为了submit,那么form.submit()就会报错。
 2011-8-25Add

33 如果利用全角空格进行布局时,Firefox支持,而IE会去除只剩一个,但是是在某些情况下的,具体看这篇文章:http://w3help.org/zh-cn/causes/BT1025

34 透明度:

filter:alpha(opacity=0); /* IE */

-moz-opacity:0.3; /* Moz + FF */
 opacity: 0.3;

 
    至于用不用var的区别,undefined和null的区别,Ajax构建的不同方式,这些一般的Java程序员都了解了。

    很多Java程序员也会使用JS框架,比如JQuery,Extjs和Dojo,她们都帮我们屏蔽了很多兼容性问题。
    Dojo提供了Java一样的面向对象机制。

分享到:
评论

相关推荐

    浏览器兼容性问题简介

    资源名称:浏览器兼容性问题简介内容简介:浏览器兼容性问题分类浏览器的“模式”如何编写具有良好兼容性的网页显示问题:CSS兼容性height/width, position:fixed, …脚本问题:Java script 兼容性DOM, Date....

    浏览器兼容代码大全

    ### 浏览器兼容代码大全 #### 概述 本文档提供了一系列的代码示例,旨在帮助初学者解决不同浏览器间的兼容性问题。通过本文档的学习,你可以掌握如何编写能够跨浏览器正常显示的网页,包括但不限于CSS样式调整、...

    web 浏览器兼容工具

    "Web浏览器兼容工具"就是为了帮助开发者解决这一问题而设计的。这类工具能够帮助我们分析不同浏览器之间的样式差异,提供解决兼容性问题的代码或建议,从而确保网站在各种主流浏览器上都能正常工作。 首先,我们...

    WebRebuild北京第一届交流会之2:《浏览器兼容性问题简介》——黄昊

    浏览器兼容性问题一直是Web开发中的一个关键挑战,尤其是在构建跨平台、多设备的网页时。黄昊在WebRebuild北京第一届交流会上所分享的《浏览器兼容性问题简介》揭示了这些问题的核心及其解决策略。 首先,浏览器...

    解决360双核浏览器兼容模式的页面显示问题

    针对360双核浏览器兼容模式的页面显示问题,开发者可以使用内核控制Meta标签来手动指定浏览器应使用的渲染内核。通过在HTML页面的部分添加特定的标签,开发者可以告诉360浏览器使用webkit内核或者IE兼容模式(ie-...

    浏览器兼容测试工具

    浏览器兼容性测试是Web开发过程中不可或缺的一环,因为不同的浏览器可能会有不同的解析标准和实现方式,导致同一段代码在不同浏览器中的表现不一致。为了解决这个问题,开发者通常需要借助各种浏览器兼容测试工具来...

    常见浏览器兼容问题

    ### 常见浏览器兼容问题 在Web开发中,浏览器兼容性问题一直是开发者们需要面对的重要挑战之一。不同浏览器对CSS、HTML等标准的支持程度不一,常常导致页面在不同浏览器下显示效果各异。本文将根据提供的部分描述,...

    浏览器兼容之旅第二站:各浏览器的Hack写法让浏览器达到一致的渲染效果

    Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack这一节将和大家一起学习:浏览器兼容之旅的第二站:...

    CSS属性、浏览器兼容与网页布局

    CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页布局CSS属性、浏览器兼容与网页...

    浏览器兼容

    浏览器兼容性是IT领域中的一个重要话题,特别是在网页开发和用户体验设计中。这个主题涉及到不同的网络浏览器如何处理相同的HTML、CSS、JavaScript代码以及Web标准的实现差异。以下是对这个主题的详细解析: 首先,...

    多浏览器兼容的JS日历控件

    "多浏览器兼容的JS日历控件"就是这样一个解决方案,它旨在提供一致的用户体验,无论用户使用的是Firefox、Chrome、Safari、Edge还是Internet Explorer。这个日历控件在设计时特别考虑了跨浏览器的兼容性,避免了由于...

    position:sticky用法介绍及浏览器兼容性

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如...

    浏览器兼容常见问题css兼容

    浏览器兼容常见问题css兼容 css兼容 浏览器兼容 IE6789兼容

    浏览器兼容性.pdf

    浏览器兼容性是指不同的浏览器对于同一段代码可能会有不同的解析方式,从而导致页面在不同的浏览器上显示效果不一致的问题。这是前端开发中非常重要的一个问题,它直接关系到网站或应用在用户端的展示质量。 在讨论...

    BrowserCompatabilityTest:浏览器与不同浏览器的兼容性

    浏览器兼容性测试是Web开发中的一个关键环节,尤其是在JavaScript应用中。由于不同的浏览器对Web标准的支持程度不一,开发者必须确保他们的代码能在多种浏览器环境下正常工作。本项目名为"BrowserCompatabilityTest...

    浏览器兼容性设置级解释

    浏览器兼容性设置是Web开发中的一个关键议题,尤其是在多浏览器环境下。不同的浏览器使用不同的渲染引擎,这导致了它们对HTML、CSS和JavaScript的解析和执行存在差异,从而影响到网页的展示效果。以下是对主要浏览器...

    前端必读:浏览器内部工作原理.pdf

    开发者需要考虑不同浏览器的兼容性问题,确保网站能够在各种浏览器上正常工作。 五、浏览器的未来发展 随着Web技术的不断进步,浏览器也在不断进化。HTML5和CSS3等新一代标准的推出,为浏览器提供了更多功能和更...

    浏览器兼容问题处理

    在前端开发中,浏览器兼容问题一直是开发者面临的一大挑战。不同的浏览器对某些JavaScript语法、DOM操作以及CSS样式的支持程度不尽相同,这导致了在不同浏览器下可能出现功能差异或者页面渲染问题。以下是一些常见的...

Global site tag (gtag.js) - Google Analytics