zoukankan      html  css  js  c++  java
  • 客户端检测

    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. 为了跟踪分析等目的需要知道确切的浏览器。
  • 相关阅读:
    AutoMapper,对象映射的简单使用
    Angular 4.0从入门到实战
    IE报错:The given path's format is not supported
    原生js中slice()方法和splice()区别
    使用jquery插件ajaxfileupload一次上传多个文件,示例
    C#路径中获取文件全路径、目录、扩展名、文件名称
    NET二进制图片存储与读取的常见方法,iTextSharp添加图片生成PDF文件
    Type.GetType()反射另外项目中的类时返回null的解决方法
    C#中对于Enum类型的遍历
    读取word到二进制,再转成word
  • 原文地址:https://www.cnblogs.com/huoteng/p/4963608.html
Copyright © 2011-2022 走看看