• 客户端检测


    1. 能力检测

    function getElement(id){
        if (document.getElementById){
            return document.getElementById(id);
        } else if (document.all){
            return document.all[id];
        } else {
            throw new Error("No way to retrieve element!");
        }
    }
    

    1.1 更可靠的能力检测

    //不要这样做!这不是能力检测——只检测了是否存在相应的方法
    function isSortable(object){
        return !!object.sort;
    }
    
    //这样更好:检查 sort 是不是函数
    function isSortable(object){
        return typeof object.sort == "function";
    }
    
    //在 IE 中会导致错误
    var xhr = new ActiveXObject("Microsoft.XMLHttp");
    if (xhr.open){ //这里会发生错误
        //执行操作
    }
    
    //作者: Peter Michaux
    function isHostMethod(object, property) {
        var t = typeof object[property];
        return t=='function' ||
        (!!(t=='object' && object[property])) ||
        t=='unknown';
    }
    result = isHostMethod(xhr, "open"); //true
    result = isHostMethod(xhr, "foo"); //false
    

    1.2 能力检测,不是浏览器检测

    //确定浏览器是否支持 Netscape 风格的插件
    var hasNSPlugins = !!(navigator.plugins && navigator.plugins.length);
    //确定浏览器是否具有 DOM1 级规定的能力
    var hasDOM1 = !!(document.getElementById && document.createElement &&
                                 document.getElementsByTagName);
    
    • 在实际开发中,应该将能力检测作为确定下一步解决方案的依据,而不是用它来判断用户使用的是什么浏览器。

    2. 怪癖检测

    3. 用户代理检测

    3.1 用户代理字符串的历史

    3.2 用户代理字符串检测技术

    3.3 完整的代码

    3.4 使用方法

    • 用户代理检测是客户端检测的最后一个选择。只要可能,都应该优先采用能力检测和怪癖检测。
    • 用户代理检测一般适用于下列情形:
    1. 不能直接准确地使用能力检测或怪癖检测。
      例如,某些浏览器实现了为将来功能预留的存根(stub)函数。
      在这种情况下,仅测试相应的函数是否存在还得不到足够的信息。
    2. 同一款浏览器在不同平台下具备不同的能力。这时候,可能就有必要确定浏览器位于哪个平台下。
    3. 为了跟踪分析等目的需要知道确切的浏览器。
  • 相关阅读:
    MongoDB入门示例及介绍
    Oracle/PLSQL CURSOR FOR Loop
    JAVA写的文件分割与文件合并程序
    synchronized 解决死锁的问题 轉貼
    采用批处理命令对文件进行解压及采用SQLCMD进行数据库挂载
    chapter6作业
    chapter5作业
    chapter4作业
    Linuz系统管理 -----账号管理
    chapter02
  • 原文地址:https://www.cnblogs.com/HuoAA/p/5074210.html
Copyright © 2020-2023  润新知