All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
visual c++中的错误处理
解决WIN2003安装sqlserver2000失败_[SQL Server教程]
PHP代码:基本数据结构和php内置函数_php资料_编程技术
如何实现Asp与Asp.Net共享Session_.net资料_编程技术
防网站登陆被破解的简单方法_[Asp.Net教程]
在搜索结果出来之前页面显示“等待中...”的做法_[Asp.Net教程]
Sqlserver数据库安全配置九大措施_[SQL,Server教程]
ASP.NET生成高质量缩略图通用函数
ASP.NET,MVC,Framework体验(2):显示列表数据_[Asp.Net教程]
PHP,PEAR简介_php资料_编程技术
Reading number is top 10 pictures
Summer is most suitable for young people to travel in China3
全球清廉国家排行
A man's favorite things7
Beauty ZhiHuiLin2
人美胸美腿更美4
西游日记4
Female model behind the bitterness, often being overcharged3
姑娘手慢了,已经走光了
深圳的风光
超强高考作文
Download software ranking
Boxer's Top ten classic battle8
Ashlynn Video4
Popkart Cracked versions Mobile phone games
徐若瑄成名作“魔鬼天使”
Eclipse 4.2.2 For Win64
Tram sex maniac 2 (H) rar bag8
Sora aoi's film--cangkong_Blue.Sky
天龙八部最新服务端
电车之狼R
功夫熊猫2(上集)
delv published in(发表于) 2013/12/31 6:39:04 Edit(编辑)
使用javascript检测浏览器的相关特性_JavaScript技术_编程技术

使用javascript检测浏览器的相关特性_JavaScript技术_编程技术

使用javascript检测浏览器的相关特性_JavaScript技术_编程技术-你的首页-uuhomepage.com

一、检测浏览器的名称
问题:
不同的浏览器对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方法
}
}





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.