Javascript-为什么使用Object dectec而不是browser dectect
来源:互联网 发布:种植牙的利与弊 知乎 编辑:程序博客网 时间:2024/05/01 08:50
Object dectect
学习Javascript不久后你就会发现特定的Javascript功能在特定浏览器上并不能正常执行。如果你想使用某些高级功能,你需要检查浏览器是否支持它,这篇文章告诉你怎么做。
Browser dectection:No
如果你想知道浏览当前页面的浏览器是否支持某个特定对象,绝对不要使用browser dectect。虽然你明确的知道特定浏览器对该功能呢该是否支持,但是你怎么知道其他所有浏览器,甚至是你不知道的浏览器呢?
Browser dectetion在90%情况下工作正常,但是在少量访问者还是会出现问题,这包括那些你不知道的浏览器和新出现的浏览器。
案例研究:mouseovers
我们应该知道IE3不支持对mouseover很重要的document.images数组,所以我们需要阻止mouseover代码在IE3上运行。其中一个解决方法就是不在浏览器检测结果为IE3的浏览器上运行mouseover代码。
但是在绝大多数操作系统上,netscape2也不支持document.images。如果只做浏览器检测,netscape将会产生错误。那么我们为什么不将netscape加入到浏览器检测中去呢?因为在OS/2上的netscape几乎和netscape3完全兼容并且可以处理mouseover效果。所以使用了浏览器检测后所有netscape2用户将都不能现实mouseover效果。
同时,浏览器给与用户修改浏览器标识符的权限,所以浏览器检测的结果可能并不靠谱。
Object dectection:Yes
因此,我们简单测试浏览器是否支持某个我们要使用的对象。继续mouseover例子。代码依赖于document.images,所以我们测试浏览器是否支持它,这可以通过以下代码完成:
if (document.images){do something with the images array}
重点
所以一切的重点就是如果你想使用document.images,首先检查它。
如果使用object dectection,你的代码永远不会产生错误信息,虽然在特定浏览器可能不能正常工作.
原文:http://www.quirksmode.org/js/support.html
- Javascript-为什么使用Object dectec而不是browser dectect
- Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__
- 为什么输出是String而不是Object
- JavaScript-BOM对象(Browser Object Model)
- 为什么使用Qt而不是MFC
- 为什么使用ReLU而不是sigmoid
- 为什么使用PreparedStatement而不是Statement
- Effective JavaScript Item 46 优先使用数组而不是Object类型来表示有顺序的集合
- Object中的clone为什么是protected,而不是public?
- 为什么打印出The window而不是My Object?
- 为什么你应该使用OPENGL而不是DIRECTX?
- 为什么delegate属性使用delegate而不是retain?
- 为什么你应该使用OpenGL而不是DirectX?
- 为什么你应该使用OpenGL而不是DirectX?
- 为什么Android开发使用Java而不是C++?
- 为什么delegate属性使用delegate而不是retain?
- 为什么我们使用Nginx而不是Apache
- NSString 为什么要使用copy,而不是retain?
- [working note][DB]AceDB数据库的多线程和单线程访问
- java语法基础
- Windows Shell Programming...
- web的主要开发方法,对网页的二次开发~cms
- 如何成为“一分钟经理人”?
- Javascript-为什么使用Object dectec而不是browser dectect
- Win 8应用开发马拉松——程序人生,共享精彩
- WCF (Windows Communication Foundation) Create & Implement a WCF Client
- php生成excel报表
- DataGeridView添加行号
- 【OpenStack】OpenStack keystone的理解 2
- sql 2008 安装失败 mof语法错误 处理
- c++ primer 4 中10.6节算法改正
- DataGridViewRow 改变奇数行颜色