• 那些开源程序中让人叹为观止的代码


    浏览器特性判断

    解决问题:判断某事件/方法在当前浏览器中是否支持

    开源程序:Modernizr

    众所周知,各个不同的浏览器对于代码渲染的实现也各自为政百花齐放,虽然有W3C在维护着标准,但是由于市面上存在很多浏览器,每个浏览器又有数不尽的历史版本,因此对于浏览器兼容性问题的判断成了在写JS应用中必不可少的技能。

    以前大家都倾向于做浏览器类型和版本的检测,现在倾向于做浏览器的特性检测,这样更有实际用处。今天要提到的是通过判断事件是否存在来探测浏览器兼容性支持。比如onmousewheel事件,并不是所有的浏览器都会支持,我们可以这样:

    if(document.onmousewheel){
        //这里是处理代码
    }
    

    这种方式会有一个明显的弊端,如果某恶意用户注入了一段代码,重新定义了document.onmousewheel事件的实现,那么就会偏离我们的预期,执行到了不该执行的代码。

    看看Modernizr中是如何来做的。

    function is( obj, type ) {
        return typeof obj === type;
    }
    
    var isEventSupported = (function() {
    
      var TAGNAMES = {
        'select': 'input', 'change': 'input',
        'submit': 'form', 'reset': 'form',
        'error': 'img', 'load': 'img', 'abort': 'img'
      };
    
      function isEventSupported( eventName, element ) {
    
        element = element || document.createElement(TAGNAMES[eventName] || 'div');
        eventName = 'on' + eventName;
    
        var isSupported = eventName in element;
    
        if ( !isSupported ) {
          if ( !element.setAttribute ) {
            element = document.createElement('div');
          }
          if ( element.setAttribute && element.removeAttribute ) {
            element.setAttribute(eventName, '');
            isSupported = is(element[eventName], 'function');
    
            if ( !is(element[eventName], 'undefined') ) {
              element[eventName] = undefined;
            }
            element.removeAttribute(eventName);
          }
        }
    
        element = null;
        return isSupported;
      }
      return isEventSupported;
    })();
    

    使用方式也很简单:

    isEventSupported("mousewheel")// Chrome
    -> true 
    isEventSupported("mousewheel")// Firefox
    -> false
  • 相关阅读:
    记录ubuntu安装nvidia-drivers简单的做法
    Win 与 Ubuntu 双系统时间同步问题解决
    记录安装mmdetection
    记录ubuntu 16.04安装matlab 2016b的过程
    vmware ubuntu 16.04 扩容 根目录
    记录一下使用qt designer和pyqt5做界面的过程
    提升模型性能的几个方法以及训练集测试集验证集的划分与作用
    Markdown语法 (转载)
    CatBoost: gradients boosting with categorical features support
    Gradient Centralization: A New Optimization Technique for Deep Neural Networks
  • 原文地址:https://www.cnblogs.com/jiji262/p/3656465.html
Copyright © 2020-2023  润新知