《JavaScript高级程序设计 (第3版)》学习笔记33:chapter_9 能力检测和怪癖检测

这是第33篇学习笔记!
让学习“上瘾”,成为更好的自己!!!

一,能力检测

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>能力检测</title>
</head>
<body>


<script>

//【注意】 检测Web客户端的手段有很多,优先使用“通用”的检测方法,不到万不得已,就不要使用客户端检测!!
/**
    能力检测(特性检测):不是识别特定的浏览器,而是识别浏览器的能力
                        确定浏览器支持的特定的能力,就可以给出解决方案

    本质:检测浏览器是否支持特定的DOM方法



*/
    function getElement(id){
        if(document.getElementById){  
            // 在使用能力检测时,一定要删除方法名后的圆括号,否则,测试的是方法的结果,无论方法是否存在
            return document.getElementById(id);

        } else if(document.all){  // only for IE5之前
            return document.all(id); // 实现与document.getElementById(id)一样的效果

        } else{
            throw new Error('No way to retrieve element!!');
        }

    }
    // 【理解能力检测】
    //  1, 先检测达成目的的最常用的特性,可以保证代码最优化,因为多数情况下都可以避免测试多个条件。如先document.getElementById(id),再document.all(id)
    //  2, 必须测试实际用到的特性。一个特性存在,不一定意味另一个特性也存在



    // 1, 更可靠的能力检测 
    // 在可能的情况下,尽量使用“typeof”进行能力检测!!
    // 例如:检测一个对象是否支持排序
    function isSortable(obj){
        return typeof obj.sort == 'function';
    }

    // 对于IE,涉及时在来看!!



    // 2, 能力检测,不是浏览器检测 
    // 如果知道应用程序需要使用某些特性的浏览器特性(DOM方法),可以一次性检测所有相关的特性,而不要分开检测

    // 确定浏览器是否支持Netscape风格的插件
    var hasNSPlugins = (navigator.plugins || navigator.plugins.length);

    

    // 确定浏览器时候具有DOM1级规定的能力
    // 检测多个方法或者属性是否存在 ==> 逻辑或
    if (!document.getElementById || !document.getElementsByName ){
        return false;
    }



    // 【注意】在实际开发中,应该将能力检测作为确定下一步解决方案的依据,而不是用他来判断用户使用的是什么浏览器





</script>



</body>
</html>

二,怪癖检测

怪癖检测:识别浏览器的特殊行为,与能力检测相比,侧重于知道浏览器存在什么缺陷(BUG)
【总结】
1,“怪癖”是个别浏览器独有的
2,实际操作时,仅仅检测那些对程序有直接影响的“怪癖”,而且应该在脚本的一开始就执行此类检测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值