总结一下浏览器间的差异如下:
1.safari下,typeof nodeList的类型为function
2.在大多数游览器中checkbox的value默认为on,唯有chrome返回空字符串
3.某些浏览器不支持w3c的cssFloat属性来获取浮动样式,而是使用独家的styleFloat属性
4.IE678的getElementByTagName(“*”)无法遍历出Object元素下的param元素(bug)
5.IE678不能通过innerHTML生成link,style,script节点(bug)
6.IE6789由于无法识别HTML5的新标签,因此复制这些新元素时也不正确(bug)
7.在标准浏览器下,cloneNode(true)是不复制事件的,以防止循环引用无法释放内存,而IE却没有考虑到这一点,把事件复制了(inconformity)
8.IE67不支持display:inline-block,需要通过hasLayout方法去模拟(bug)
9.透明度
10.标准浏览器只有在table与tr之间不存在tbody的情况下添加tbody,而IE678则笨多了,即在里面为空也乱加tbody
11.mouseenter,mouseleave只有IE支持,但它们比mouseover mouseout性能好,因此各库都有模拟的实现
12.innerText火狐不支持,它使用的是textContent
自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:
navigator 数据可被浏览器使用者更改。
浏览器无法报告晚于浏览器发布的新操作系统
所以很多时候,我们可以通过这些浏览器的兼容特性来判断是什么浏览器。
浏览器检测
由于 navigator 可误导浏览器检测,使用对象检测可用来嗅探不同的浏览器。
由于不同的浏览器支持不同的对象,您可以使用对象来检测浏览器。例如,由于只有 Opera 支持属性 "window.opera",您可以据此识别出 Opera。
例子:if (window.opera) {...some action...}