- 浏览: 200592 次
- 性别:
- 来自: 上海
最新评论
-
zhuzhuaijq:
Flash OBJECT和EMBED标签详解 -
matt.u:
好像有点深奥。
一篇比较好演示AS的重构方法 -
luofeng113:
分析得不错,
flex编程感受 -
felixsky:
请问flexunit如何测试private和internal的 ...
FLEXUnit应用 -
wv1124:
你不能分个页啊,看得人都要死了
Apollo: 开发者问答录
一、检测浏览器的名称
问题:
不同的浏览器对javascript的标准支持也有不同,有时希望脚本能够在不同的浏览器上都能运行良好,这时需要对浏览器进行检测,确定其名称,以针对不同的浏览器编写相应的脚本。
解决方案:
使用navigator对象的appName属性。
比如,要检测浏览器是否为IE,能够这么做:
var isIE = (navigator.appName == "Microsoft Internet Explorer");
document.write("is IE?" + isIE);
对于FireFox,navigator对象的appName属性值为"Netscape";Opera9.02的appName属性值为"Opera"(其更早版本可能不同);
二、检测浏览器的版本号:
问题:
随着浏览器的版镜母榔魉С值慕疟咎匦砸苍诒浠惺焙蚓托枰攵圆煌陌姹颈嘈聪嘤Φ慕疟荆敲慈绾位竦娩榔鞯陌姹竞牛?BR>解决方案:
通过解析navigator对象的userAgent属性来获得浏览器的完整版本号。
IE将自己标识为MSIE,后面带一个空格,版本号连同分号。所以我们只要取空格和分号之间的部分即可。如Windows XP SP2所带的IE的userAgent属性值为"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",能够看到其版本为6.0。能够用如下的函数来获取IE浏览器的版本号:
function getIEVersonNumber()
{
var ua = navigator.userAgent;
var msieOffset = ua.indexOf("MSIE ");
if(msieOffset < 0)
{
return 0;
}
return parseFloat(ua.substring(msieOffset + 5, ua.indexOf(";", msieOffset)));
}
假设我们要为IE5及以上版本编写脚本,能够这么写:
var isIE5Min = (getIEVersonNumber() >= 5);
if(isIE5Min)
{
// perform statements for IE 5 or later
}
对于FireFox和Opera等浏览器,也能够用navigator.userAgent属性来获取其版本号,只但是其形式和IE有所不同,如FireFox:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Opera:Opera/9.02 (Windows NT 5.1; U; en)根据这些形式,我们不难获得其版本号。但这些浏览器的其他版本没有测试过,其具体值不明确,假如要使用这种方法检测,请自行验证。
下面讨论下,上面的那段为IE5及以上版本浏览器编写的脚本,使用这种写法要注意:要用>=而不是==,一般情况下,我们能够假定浏览器是向后兼容的,所以使用==显然不能适应新版本;另一方面,我们上面的假定也仅仅是假定,不能确保是这样,假如浏览器的某些对象或属性不能向后兼容,我们的代码也会产生问题,所以建议,少用浏览器版本的比较,更多情况下,应检测是要用的对象或属性是否得到支持。
三、检测客户端的操作系统类型
根据上面的讨论能够看到,navigator.userAgent属性通常含有操作系统的基本信息,但很不幸,没有统一的规则去根据userAgent获取准确的操作系统信息,因为这些值和浏览器的种类、浏览器的版本甚至浏览器的OEM版本都有关系。
通常我们能做的是,检测一些更为通用的信息,比如操作系统是Windows还是Mac,而不是去看是Windows 98还是Windows XP。其规则是任何的Windows版本都会含有"Win",任何的Macintosh版本都含有"Mac",任何的Unix则含有"X11",而在 Linux下则同时包含"X11"和"Linux"。如:
var isWin = (navigator.userAgent.indexOf("Win") != -1);
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var isUnix = (navigator.userAgent.indexOf("X11") != -1);
通常用在为不同的操作系统配置不同的字体或位置等样式。
四、检测浏览器对特定对象的支持
问题:
假如需要编写对多种浏览器或浏览器的多个版本都能适用的脚本,就要进行检测一下,浏览器是否支持某个对象。当然这种检测主要是针对那些潜在的不兼容对象的语句。
解决方案:
早期的浏览器对于img元素的支持差别很大,所以要在脚本中操作img元素,需要检测浏览器是否支持。这时我们无需对任何可能的浏览器一一检测,只需在必要的地方用下面的方式检测:
function rollover(imgName, imgSrc)
{
// 假如支持images对象
if(document.images)
{
// statements go here
}
}
这种方法能够生效是基于一个事实:假如document.images对象不存在,那么if求值的结果为false。
使用这种方法,使得对对象的检测变得简单易行,但是我们要注意,对于那些不支持该对象的浏览器要如何较好得处理。看下面的代码:
function getImgAreas()
{
var result = 0;
for(var i = 0; i < document.images.length; i++)
{
result += (document.images[i].width * document.images[i].height);
}
return result;
}
function reportImageArea()
{
document.form1.imgData.value = getImgAreas();
}
这里没用对象支持的检测。假如浏览器支持document.images,这两个函数运行正常;否则就会抛出异常。下面是改进的脚本:
function getImgAreas()
{
var result;
// 检测浏览器是否支持对象
if (document.images)
{
result = 0;
for (var i = 0; i < document.images.length; i++)
{
result += (document.images[i].width * document.images[i].height);
}
}
// 返回值为一个数字或null
return result;
}
function reportImageArea()
{
// 现在能够判断返回值
var imgArea = getImgAreas();
var output;
if (imgArea == null)
{
// 对于不支持images对象的浏览器也要给出相应信息
output = "Unknown";
} else {
output = imgArea;
}
document.reportForm.imgData.value = output;
}
这样,不管浏览器是否支持该对象,都能给用户比较合理的信息,而不会跳出突兀的错误信息。
五、检测浏览器对特定属性和方法的支持
问题:
检测一个对象是否含有某个特定的属性或方法。
解决方案:
大多数情况下,能够用类似于下面的代码来判断:
if(objectTest && objectPropertyTest)
{
// OK to work with property
}
先检测对象是否存在,然后再检测对象的属性是否存在。假如对象确实不存在,该方法有效;假如属性存在,但其值为null, 0, false,if语句求值的结果也将是false!所以这种方法并不安全,最好的方法是这样:
if (objectReference && typeof(objectReference.propertyName) != "undefined")
{
// OK to work with property
}
对于方法的检测也可用类似的方法:
function myFunction()
{
if (document.getElementById)
{
// 这里能够使用getElementById方法
}
}
以上内容由 华夏名网 收集整理,如转载请注明原文出处,并保留这一部分内容。
“华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租赁业务。公司创建于2002年,经过近5年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为25大IDC服务商之一。
华夏名网网址导航: 虚拟主机 双线主机 主机 域名注册 cn域名 域名 服务器租赁 酷睿服务器 vps vps主机 cdn
问题:
不同的浏览器对javascript的标准支持也有不同,有时希望脚本能够在不同的浏览器上都能运行良好,这时需要对浏览器进行检测,确定其名称,以针对不同的浏览器编写相应的脚本。
解决方案:
使用navigator对象的appName属性。
比如,要检测浏览器是否为IE,能够这么做:
var isIE = (navigator.appName == "Microsoft Internet Explorer");
document.write("is IE?" + isIE);
对于FireFox,navigator对象的appName属性值为"Netscape";Opera9.02的appName属性值为"Opera"(其更早版本可能不同);
二、检测浏览器的版本号:
问题:
随着浏览器的版镜母榔魉С值慕疟咎匦砸苍诒浠惺焙蚓托枰攵圆煌陌姹颈嘈聪嘤Φ慕疟荆敲慈绾位竦娩榔鞯陌姹竞牛?BR>解决方案:
通过解析navigator对象的userAgent属性来获得浏览器的完整版本号。
IE将自己标识为MSIE,后面带一个空格,版本号连同分号。所以我们只要取空格和分号之间的部分即可。如Windows XP SP2所带的IE的userAgent属性值为"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",能够看到其版本为6.0。能够用如下的函数来获取IE浏览器的版本号:
function getIEVersonNumber()
{
var ua = navigator.userAgent;
var msieOffset = ua.indexOf("MSIE ");
if(msieOffset < 0)
{
return 0;
}
return parseFloat(ua.substring(msieOffset + 5, ua.indexOf(";", msieOffset)));
}
假设我们要为IE5及以上版本编写脚本,能够这么写:
var isIE5Min = (getIEVersonNumber() >= 5);
if(isIE5Min)
{
// perform statements for IE 5 or later
}
对于FireFox和Opera等浏览器,也能够用navigator.userAgent属性来获取其版本号,只但是其形式和IE有所不同,如FireFox:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Opera:Opera/9.02 (Windows NT 5.1; U; en)根据这些形式,我们不难获得其版本号。但这些浏览器的其他版本没有测试过,其具体值不明确,假如要使用这种方法检测,请自行验证。
下面讨论下,上面的那段为IE5及以上版本浏览器编写的脚本,使用这种写法要注意:要用>=而不是==,一般情况下,我们能够假定浏览器是向后兼容的,所以使用==显然不能适应新版本;另一方面,我们上面的假定也仅仅是假定,不能确保是这样,假如浏览器的某些对象或属性不能向后兼容,我们的代码也会产生问题,所以建议,少用浏览器版本的比较,更多情况下,应检测是要用的对象或属性是否得到支持。
三、检测客户端的操作系统类型
根据上面的讨论能够看到,navigator.userAgent属性通常含有操作系统的基本信息,但很不幸,没有统一的规则去根据userAgent获取准确的操作系统信息,因为这些值和浏览器的种类、浏览器的版本甚至浏览器的OEM版本都有关系。
通常我们能做的是,检测一些更为通用的信息,比如操作系统是Windows还是Mac,而不是去看是Windows 98还是Windows XP。其规则是任何的Windows版本都会含有"Win",任何的Macintosh版本都含有"Mac",任何的Unix则含有"X11",而在 Linux下则同时包含"X11"和"Linux"。如:
var isWin = (navigator.userAgent.indexOf("Win") != -1);
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var isUnix = (navigator.userAgent.indexOf("X11") != -1);
通常用在为不同的操作系统配置不同的字体或位置等样式。
四、检测浏览器对特定对象的支持
问题:
假如需要编写对多种浏览器或浏览器的多个版本都能适用的脚本,就要进行检测一下,浏览器是否支持某个对象。当然这种检测主要是针对那些潜在的不兼容对象的语句。
解决方案:
早期的浏览器对于img元素的支持差别很大,所以要在脚本中操作img元素,需要检测浏览器是否支持。这时我们无需对任何可能的浏览器一一检测,只需在必要的地方用下面的方式检测:
function rollover(imgName, imgSrc)
{
// 假如支持images对象
if(document.images)
{
// statements go here
}
}
这种方法能够生效是基于一个事实:假如document.images对象不存在,那么if求值的结果为false。
使用这种方法,使得对对象的检测变得简单易行,但是我们要注意,对于那些不支持该对象的浏览器要如何较好得处理。看下面的代码:
function getImgAreas()
{
var result = 0;
for(var i = 0; i < document.images.length; i++)
{
result += (document.images[i].width * document.images[i].height);
}
return result;
}
function reportImageArea()
{
document.form1.imgData.value = getImgAreas();
}
这里没用对象支持的检测。假如浏览器支持document.images,这两个函数运行正常;否则就会抛出异常。下面是改进的脚本:
function getImgAreas()
{
var result;
// 检测浏览器是否支持对象
if (document.images)
{
result = 0;
for (var i = 0; i < document.images.length; i++)
{
result += (document.images[i].width * document.images[i].height);
}
}
// 返回值为一个数字或null
return result;
}
function reportImageArea()
{
// 现在能够判断返回值
var imgArea = getImgAreas();
var output;
if (imgArea == null)
{
// 对于不支持images对象的浏览器也要给出相应信息
output = "Unknown";
} else {
output = imgArea;
}
document.reportForm.imgData.value = output;
}
这样,不管浏览器是否支持该对象,都能给用户比较合理的信息,而不会跳出突兀的错误信息。
五、检测浏览器对特定属性和方法的支持
问题:
检测一个对象是否含有某个特定的属性或方法。
解决方案:
大多数情况下,能够用类似于下面的代码来判断:
if(objectTest && objectPropertyTest)
{
// OK to work with property
}
先检测对象是否存在,然后再检测对象的属性是否存在。假如对象确实不存在,该方法有效;假如属性存在,但其值为null, 0, false,if语句求值的结果也将是false!所以这种方法并不安全,最好的方法是这样:
if (objectReference && typeof(objectReference.propertyName) != "undefined")
{
// OK to work with property
}
对于方法的检测也可用类似的方法:
function myFunction()
{
if (document.getElementById)
{
// 这里能够使用getElementById方法
}
}
以上内容由 华夏名网 收集整理,如转载请注明原文出处,并保留这一部分内容。
“华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租赁业务。公司创建于2002年,经过近5年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为25大IDC服务商之一。
华夏名网网址导航: 虚拟主机 双线主机 主机 域名注册 cn域名 域名 服务器租赁 酷睿服务器 vps vps主机 cdn
发表评论
-
如何优化JavaScript脚本的性能
2008-08-19 10:01 1147如何优化JavaScript脚本的 ... -
几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
2008-08-18 16:53 1673AJAX是web20的基石,现在 ... -
CSS技巧集合
2008-08-14 13:08 1024一.使用css缩写 使 ... -
IE6下png图片和png背景透明
2008-08-14 12:56 18719http://www.163show.cn/blog/inde ... -
记录没有看完
2008-07-24 10:50 863http://www.iteye.com/news/1816 -
实现不同域(Domain)之间的数据交换
2008-07-15 15:49 1480引言 前些天在对公司原有的 web 应用进行改版时遇到一个问题 ... -
网页中超长文字的断行问题
2008-07-15 10:11 1943网页中超长文字的断行问题2006/9/25 at 01:50 ... -
JS中的instanceof和typeof
2008-06-24 16:35 1700对于instanceof和typeof,以前偶尔的用到过,特别 ... -
JavaScript OOP
2008-06-16 15:25 868JavaScript的对象总有4类: 脚本对象 ... -
prototype.js简易教程文档2
2008-05-26 17:41 11614.15. options 参数对象 AJAX操作中一个重要的 ... -
prototype.js简易教程手册1
2008-05-26 17:39 15261. Prototype是什么? 或许你还没有用过它, pro ... -
JavaScript[对象.属性]集锦
2008-05-26 17:37 949SCRIPT 标记 用于包含JavaScript代码. ... -
使用Session常见问题集锦
2008-05-26 17:35 1087问:为什么Session在有些 ... -
css例子
2008-05-22 19:15 1478原文作者:Douglas Bowman ... -
转载--Cookie专题
2008-05-22 16:28 1217Document 对象中有一个cook ... -
Javascript数组及其操作
2008-05-22 16:26 7921本文介绍如下几个方面的内容: 1.如何创建数组 2.如何对数 ... -
js事件
2008-05-22 11:23 1772一.今天的事件 事件是DOM的一部分,在DOM Level ... -
ie和firefox的兼容性问题
2008-05-22 11:21 9971.event.srcElement问题 在IE下,even ... -
学习javascript的事件
2008-05-22 11:18 978在很多语言的学习中,“事件”都是一个比较难理解,但是又是一个很 ... -
js的&&和&,||和|运算符两个不同点
2008-05-22 11:15 12101.性能上的比较 如果&&的第一个运算数是f ...
相关推荐
### 使用navigator对象检测浏览器版本及特性 在网页开发过程中,有时候我们需要根据用户的浏览器类型或版本来调整页面的行为或样式。JavaScript 提供了 `navigator` 对象来帮助开发者获取客户端浏览器的相关信息,...
### JavaScript检测浏览器类型和版本的方法 #### 一、概述 在Web开发中,有时需要根据用户的浏览器类型或版本来提供不同的功能或体验。这可以通过多种方式实现,其中两种常用的方法为**对象/特征检测法**与**User-...
除了传统的User-Agent检测,还可以使用特性检测(feature detection),如Modernizr库,来检测浏览器是否支持特定的HTML5、CSS3或JavaScript特性,而非依赖于特定的浏览器版本。 7. **最佳实践** - 避免过度依赖...
### 检测当前浏览器支持的...**Modernizr**是一个非常流行的JavaScript库,它可以自动检测浏览器是否支持一系列现代Web技术,包括各种JavaScript特性。 要使用Modernizr,首先需要将其包含在HTML文件中: ```html ...
总结来说,检测无头浏览器通常需要结合多种方法,包括检查 User Agent、浏览器插件、语言设置、WebGL 特性以及浏览器的行为特征。需要注意的是,这些方法并非绝对可靠,因为User Agent可以被篡改,而其他特征也可能...
总体来说,可以通过检测事件触发的顺序以及特定的浏览器特性来确定用户的行为。 在实际代码中,作者提出了几种方法,包括: - 使用`window.event`来获取触发事件的环境信息,并判断页面是关闭还是刷新。 - 利用`...
在IT领域,尤其是在Web开发中,检测浏览器的相关信息是一项至关重要的任务。这涉及到对用户使用的浏览器类型、版本、操作系统、设备特性的识别,以便开发者能够为不同平台提供最佳的用户体验和兼容性。以下是对这个...
4. 使用polyfill库:如Modernizr,这类库可以检测浏览器对特定特性的支持情况,并提供缺失功能的模拟实现。这样可以在旧版浏览器中实现新特性,同时避免了手动检测。 总的来说,检测浏览器支持的JavaScript版本是...
### 检测浏览器支持哪些HTML5新特性的方法 #### 一、HTML5与浏览器兼容性概述 HTML5作为Web开发的一个重要里程碑,并非一个全新的概念,而是对现有HTML标准的一系列增强与扩展。尽管HTML5的标准仍在不断演进和完善...
在进行网页开发时,经常会遇到浏览器兼容性问题,尤其是在使用JavaScript编程语言的时候。不同浏览器之间的差异可能会影响到代码的正常运行。因此,解决这些兼容性问题就成为了网页开发者们必须面对的一个挑战。 ...
总之,JavaScript检测浏览器的缩放状态涉及到多种浏览器特性与属性,开发者需要根据不同的环境和需求选择合适的方法来实现这一功能。通过上述方法的综合运用,开发者可以更好地适应浏览器的缩放变化,优化网页的用户...
6. **CSS3属性的兼容处理**:使用JavaScript库(如Modernizr)检测浏览器对CSS3属性的支持,然后为不支持的浏览器提供备选样式。 7. **盒模型差异**:由于不同浏览器对盒模型的解析方式不同,可以使用JavaScript来...
通过以上分析可以看出,使用JavaScript检测不同浏览器并根据其特点选择合适的标签和技术是完全可行的。这不仅可以提高网页的兼容性,还可以增强用户体验。然而,需要注意的是,`navigator.userAgent`可能会被篡改...
### JavaScript 判断浏览器类型及版本的方法 在网页开发过程中,有时候我们需要根据用户的浏览器类型和版本来执行特定的代码逻辑或调整界面布局。这是因为不同的浏览器在处理某些特性时可能存在差异,例如对新标准...
在本文中,我们将深入探讨如何通过JavaScript来检测不同的浏览器类型,并了解这些方法的实际应用场景与局限性。根据给定的信息,我们可以看到主要分为两个部分:一是通过`User-Agent`字符串进行浏览器识别;二是通过...
除了直接检测浏览器名称,还可以检测浏览器是否支持某些特性,例如: ```javascript if ('addEventListener' in window) { console.log("浏览器支持addEventListener方法,这意味着它是一个现代浏览器"); } ``...
Modernizr是Web开发者的得力助手,通过自动化检测浏览器的HTML5和CSS3支持,简化了兼容性处理。它促进了创新,鼓励开发者充分利用新技术,同时也确保了旧浏览器的兼容性。使用Modernizr,开发者可以构建更具前瞻性和...
开发者可以使用`navigator.userAgent`来检测浏览器类型,实现跨浏览器兼容性处理。 4. **screen对象**:screen对象提供了用户设备屏幕的相关信息,如屏幕宽度、高度、颜色深度等。这在需要根据屏幕尺寸调整布局的...
Feature.js是一款轻量级的浏览器特性检测JavaScript库插件。该插件运行速度快,使用简单,文件只有1kb大小。通过Feature.js你可以检测客户浏览器是否支持某些特性,并针对这些特性编写代码。
在JavaScript编程中,检测浏览器版本是一项重要的任务,特别是在需要确保应用程序与各种浏览器,尤其是历史悠久但仍然广泛使用的Internet Explorer(IE)兼容时。标题"js检测浏览器版本代码,兼容ie11"表明我们要...