浏览器特性判断

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

开源程序: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

转载于:https://www.cnblogs.com/jiji262/p/3656465.html

那些开源程序中让人叹为观止的代码 - 1 浏览器特性判断相关推荐

  1. 那些开源程序中让人叹为观止的代码 - 3 保持元素纵横比

    本专栏尝试记录并分享一些个人在学习和使用开源程序代码的过程中,经意或者不经意间看到的个人感觉比较有参考价值的代码片段.个人感觉,并不是说能写或者能看得懂一些晦涩难懂的代码段子,就可以成为向别人炫耀的资 ...

  2. php过滑码,小程序中多滑块的实现代码

    本篇文章给大家带来的内容是关于小程序中多滑块的实现代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 最近在用原生的代码开发小程序,需要用到多滑块的slider,但是官方的api只 ...

  3. scala 编译插件_使用Scala插件在Griffon应用程序中编译和运行Scala代码

    scala 编译插件 用于Griffon的Scala插件 0.7.1版本现已发布. 这个插件可以在Griffon应用程序上编译和运行Scala代码. Scala插件使用LangBridge插件与其他J ...

  4. PHP程序中时间戳,php 时间戳常用代码

    echo strtotime(date('Y-m-d')); 获取明天凌晨的时间戳 代码:echo strtotime(date('Y-m-d',strtotime('+1 day'))); 附上测试 ...

  5. 在.NET客户端程序中使用多线程

    在.NET客户端程序中使用多线程通常认为在编写程序中用到多线程是一个高级的编程任务,容易发生错误.在本月的栏目中,我将在一个Windows窗体应用程序中使用多线程,它具有实际的意义,同时尽量使事情简单 ...

  6. npm包管理机制引质疑:又一安装程序中发现恶意代码,开发者账户频遭劫持

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI npm行不行,包管理机制行不行? 最新的一次npm包被篡改事件,让开发者的这两个疑问更加强烈了. 最新中枪的是纯函数式编程语言Purescr ...

  7. 命名空间不能直接包含_C++程序中可以命名的5种元素

    C++程序中的许多元素都有用来表示它们的名称(也称为标识符).在C++程序中,可以命名的5种元素是: (1) 函数.函数是自包含的.可执行代码的命名块.第8章将详细讨论如何定义函数. (2) 变量.变 ...

  8. 物联网设备模糊:DIANE:识别应用程序中的模糊触发器,为物联网设备生成受限制的输入

      本文记录阅读DIANE论文的内容总结和一些阅读过程中不理解地方的补充,我是搬运工. 简介 发表会议 IEEE S&P 2021 作者 Nilo Redini∗, Andrea Contin ...

  9. c语言程序中的算数表达式X Y-Z,C语言程序设计实验教程习题1~10.docx

    C语言程序设计实验教程习题1~10 第一章一.选择题1.最早开发C语言是为了编写下面那一种操作系统( C) A .Windows B.DOS C.UNIX D.Linux2.下面哪一项不属于C语言的特 ...

最新文章

  1. Dubbo源码解析之服务路由策略
  2. 如何避免让微服务测试成为研发团队最大的瓶颈?
  3. 安卓如何限制横屏和竖屏
  4. 初学linux,在Linux上创建c程序并运行!
  5. 【Java】Java实现 JSON 的组装和解析
  6. [转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  7. Android调用Java WebSevice篇之二
  8. Python练习-装饰器版-为什么我的用户总被锁定
  9. 赋能时空云计算,阿里云数据库时空引擎Ganos上线
  10. UDS协议-代码完整性测试
  11. 测试人员代码走查基础要点
  12. 大学英语四级考试大纲
  13. 有关数据库sql语句基础小白初学者可学(持续更新)
  14. 计算机模拟人脑的智能行为叫,模拟人脑结构方可实现强人工智能目标
  15. 深入解读云场景下的网络抖动
  16. 计算机和电脑键盘进水怎么办,笔记本键盘进水失灵了怎么办?别着急,只需记住这几招!...
  17. 机器学习中类别变量的编码方法总结
  18. 成都男子因女司机别车将其暴打 同款行车记录仪获热销
  19. 一看就觉得特别好的21条感悟
  20. 【小算法】图的遍历之深度优先(DFS)

热门文章

  1. spi的dma方式前四个字节_前嗅教你大数据:常见几种编码介绍
  2. go 获取是第几周_golang 判断当前时间是第几周
  3. 对称二叉树c++_二叉树:我对称么?
  4. python 输入中文_【提醒】Python新手开发人员注意事项:不要误输入中文标点符号...
  5. bootice添加linux_如何使用老毛桃winpe的Bootice工具新建实模式启动项(Grub/Linux)?
  6. easyexcel 在 设置标题_EasyExcel 自定义单元格式的问题。
  7. docker pull下载很慢_一文了解Docker容器技术的操作
  8. c# string 转 datetime_利用swig封装C++的dll为C#方便使用
  9. css阵列,CSS3简单的圆点阵列旋转加载动画
  10. 键、索引、约束及其区别