今天写一写关于新手做网站过程当中最经常遇到的问题之一:浏览器兼容性。事实上,这个问题不仅仅是新手学习的过程中会遇到,即使是资深的前端程序员,往往也会因为这个问题头疼不已。原因很简单,虽然W3C提出了一套标准,但是浏览器厂商往往不会完全按照标准来,这当中以微软为最奇葩的代表,每代IE都各有特点,问题也不仅仅存在于IE身上,其他浏览器也很难说自己就没有问题。作为最苦逼的前端开发者,对于这些问题就不得不注意了。
浏览器兼容性问题主要来自于两个方面:css样式兼容性和javascript脚本兼容性,这点本站之前都有过文章简单的说了一下,也只能是简单的说了一下。这里面的问题之多,不是几百个字的文章能说得完的,网上有很多这类的博客,文章数往往多达数十篇,也未必能涵盖完全,我也只能简单的说一些原则性的注意点,可以帮助改善浏览器兼容性问题。
css兼容性问题:浏览器的数量太多,我们只能针对内核来进行划分,这样主流的浏览器主要是三个内核:微软的trident内核、FF的mozilla内核、chrome为代表的webkit内核。其中微软又有问题就是IE6、7、8等等虽然是一个系列的内核,但对css的解释又存在不同。总体来说做浏览器兼容性测试只要测试通过了上述浏览器,一般问题就不大了。这里面被声讨****的大概就是IE6了,微软的IE6也确实不愧是浏览器界的一朵奇葩,我自问大部分时候已经可以完全不依赖hack就做出IE7以上和FF以及webkit完美兼容的样式了,只有IE6还是会经常给我惊喜,所以要做IE6兼容就必须了解css hack,主要是专门针对ie6的“_”hack方式,因为只要你写得好点,其他的浏览器可以不用区分的,不用“*”,也不用!important,诀窍就是之前我写过的那篇新手css注意点中提到过的,以FF或者webkit作为基准来进行开发,这两个做出来的样式没有问题的情况下,IE7以上一般都不会有什么大问题,还有就是不要过分依赖浏览器自动处理,那个真的不靠谱,如果不是必要,不要采用自动高宽方式,尽量限制好页面内元素的高宽,这样可以****限度的处理好css样式兼容性问题。
javascript兼容性问题:这个也是个非常麻烦的问题来源,主要的问题依然来自于IE浏览器系列和其他浏览器的差别:IE调用的是系统组件,而其他浏览器调用的自己内建的组件,这就造成了你必须针对不同的浏览器调用不同的组件,最典型的方面莫过于ajax。但其他浏览器之间的问题也一样不少,我见过的问题就有:RGB值的表示方式的不同,offsetleft取出的值不同,还有前篇文章提到的readystate的解释不同等问题。javascript的问题有相当一部分可以靠一些脚本插件如jquery来改善,但要想做完善,需要针对不同浏览器进行详细的测试。
本文只是针对浏览器兼容性的一个简单描述,大体上我所遇到的网页浏览器兼容性问题就来自这两方面了,如果你遇到了同样的问题,不妨参照本文的思路进行排查,当然更多的还是需要靠经验的积累。