先设计最通用的方案,然后在使用特定于浏览器的技术增强该方案。
能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。采用这种方式不必估计特定的浏览器如何如何,只要确定浏览器支持特定的能力,就可以给出解决方案。
能力检测对于想知道某个特性是否会按照适当的方式行事(而不仅仅是某个特性存在)非常有用。
检测某个或某几个特性并不能够确定浏览器。
与能力检测类似,怪癖检测(quirks detection)的目标是识别浏览器的特殊行为。但与能力检测确认浏览器支持什么能力不同,怪癖检测是想要知道浏览器存在什么缺陷。
用户代理检测通过检测用户代理字符串来确定实际使用的浏览器。
所谓点击欺骗(spoofing),就是指浏览器通过在自己的用户代理字符串中加入一些错误或误导性信息,来达到欺骗服务器的目的。
Gecko是FireFox的呈现引擎。
很多时候,检测特定的浏览器还不如搞清楚它是否基于Gecko更重要。
1.识别呈现引擎
确切知道浏览器的名字和版本号不如确切知道它使用的是什么呈现引擎。
用户代理检测室客户端检测的最后一个选择。只要可能,都应该优先采用能力检测和怪癖检测。用户代理检测一般适用于如下情形:
(1)不能直接准确地使用能力检测或怪癖检测。
(2)同一款浏览器在不同平台下具备不同的能力。
(3)为了跟踪分析等目的需要知道确切的浏览器
DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。
注意,IE中的所有DOM对象都是以COM对象的形式实现的。这意味着IE中的DOM对象与原生JavaScript对象的行为或活动特点并不一致。
文档节点是每个文档的根节点。在HTML页面中,文档元素始终都是<html>元素。
每一段标记都可以通过树中的一个节点来表示:HTML元素通过元素节点表示,特性(attribute)通过特性节点表示,文档类型通过文档节点表示,而注释则通过注释节点表示。
DOM1级定义了一个Node接口,该接口将由DOM中的所有节点类型实现。这个Node接口在JavaScript中是作为Node类型实现的;除了IE之外,在其他所有浏览器中都可以访问到这个类型。JavaScript中的所有节点类型都继承自Node类型,因此所有节点类型都共享着相同的基本属性和方法。
JavaScript通过Document类型表示文档。在浏览器中,document对象是HTMLDocument(继承自Document)的一个实例,表示整个HTML页面。
1)document对象有一个body属性,直接指向<body>元素。
2)document.title包含<title>元素中的文本。
3)document.URL包含页面完整的URL(即地址栏中显示的URL)
4) document.domain属性中只包含页面的域名。
5)document.referrer保存这链接到当前页面的那个页面的URL
6)document.anchors包含文档中所有带name属性的<a>元素
7)document.applets包含文档中所有的<applet>元素
8)document.forms包含文档中所有的<form>元素
9)document.images包含文档中所有的<img>元素
10)document.links包含文档中所有带href特性的<a>元素
Element类型用于表现XML或HTML元素,提供了对元素标签名、子节点及特性的访问。
文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容。纯文本中可以包含转义后的HTML字符,但不能包含HTML代码。
注释在DOM中是通过Comment类型来表示的。
CDATASection类型只针对基于XML的文档,表示的是CDATA区域。
DocumentType类型在Web浏览器中并不常用,仅有Firefox、Safari和Opra支持它。DocumentType包含着与文档的doctype有关的信息。
在所有的节点类型中,只有DocumentFragment在文档中没有对应的标记。DOM规定文档片段(document fragment)是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。
元素的特性在DOM中以Attr类型表示。在所有浏览器中都可以访问Attr类型的构造函数和原型。
Attr对象有3个属性:name、value和specified。其中,name是特性名称(与nodeName的值相同),value是特性的值(与nodeValue的值相同),而specified是一个布尔值,用以区别特性是在代码中指定的,还是默认的。
跟操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript代码。
能够把CSS样式包含到HTML页面中的元素有两个。其中,<link>元素用于包含来自外部的文件,而<style>元素用于指定嵌入的样式。与动态脚本类似,所谓的动态样式是指在页面刚加载时不存在的样式;动态样式是在页面加载完成后动态添加到页面中的。
理解NodeList及其“近亲”NamedNodeMap和HTMLCollection,是从整体上透彻理解DOM的关键所在。这三个集合都是“动态的”;换句话说,每当文档结构发生变化时,它们都会得到更新。因此,它们始终都会保存着最新、最准确的信息。
DOM是语言中立的API,用于访问和操作HTML和XML文档。DOM1级将HTML和XML文档形象地看作一个层次化的节点树,可以使用JavaScript来操作这个节点树,进而改变底层文档的外观和结构。