码迷,mamicode.com
首页 > 编程语言 > 详细

《javascript高级程序设计》笔记(九)

时间:2014-10-05 13:21:08      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   使用   ar   java   for   

客户端检测

浏览器之间的差异和浏览器的“怪癖(quirk)”太多,因此客户端检测除了是一种补救措施外还是有效的开发策略。

万不得已就不要使用客户端检测。先设计最通用的方案,然后使用特定于浏览器的技术增强该方案。

一、能力检测

能力检测的目的不是识别特定的浏览器,而是识别浏览器的能力

基本模式:

if  (object.propertyInQuestion) {

       //使用object.propertyInQuestion

}

先检测打成目的的最常用的特性,必须测试实际要用到的特性。

1.更可靠的能力检测

检测sort是不是一个函数。

function isSortable(object){

     return typeof object.sort == "function";

}

 

在IE8及之前版本,typeof document.createElement 返回的是"object";不适用typeof属性访问ActiveX对象会出错。

2.能力检测,不是浏览器检测

程序需要用某个特定的浏览器特性应该一次性检测所有特性。

            //浏览器是否支持Netscapte风格的插件
            var hasNSPlugins = !!(navigator.plugins && navigator.plugins.length);
            
            //浏览器是否具备DOM1级所规定的能力
            var hasDOM1 = !!(document.getElementById && document.createElement && 
                           document.getElementsByTagName);

 

二、怪癖检测

目的是识别浏览器的特殊行为。

IE8之前,如果某个实力属性与[[Enumerable]]标记为false的某个原型属性同名,该属性将不会出现在for-in循环。

Safari 3以前版本会枚举被隐藏的属性。

三、用户代理检测

通过测试用户代理字符串来确定实际使用的浏览器。在每一次HTTP请求中,用户代理字符串是作为相应首部发送的,该字符串可以通过navigator.userAgent属性访问。

在服务器端这是常用而广为接受的做法,在客户端这被认为是万不得已的做法,其优先级在能力检测和怪癖检测之后。

1.用户代理字符串的历史

2.用户代理字符串检测技术

五大呈现引擎:IE、Webkit、KHTML和Opera。

3.完整的代码

4.使用方法

1.不能直接准确地使用能力检测或怪癖检测。例如:某些浏览器实现了为将来功能预留的存根(stub)函数。这种情况下,仅测试相应的函数是否存在还得不到足够的信息。

2.同一款浏览器在不同平台下具有不同的能力。这时可能要确定浏览器位于哪个平台。

3.为了跟踪分析等目的需要知道确切的浏览器。

《javascript高级程序设计》笔记(九)

标签:style   blog   http   color   io   使用   ar   java   for   

原文地址:http://www.cnblogs.com/surahe/p/4004644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!