Posted: 2005/1月/07 10:17上午 | IP记录
|
|
|
浏览器能力检测组件
对于互连网络迅猛发展的一个解释就是其开放的标准,HTML设计出来是要在任何计算机的任何浏览器上能够进行同样的显示,即用户平 台与浏览器的无关性,但是现在,这已经不太可能了。从开始,NetScape引入专有的HTML标记,例如:NetScape1 .0可以解释闪烁的文本,而现在,很多非Netscape的浏览器都不能进行解释。frame分屏则是NetScape对HTM L扩展的另外一个例子。
在NetScape一支独秀的时候,由于用户选择面有限,还没有什么大问题,微软的强行抢滩使得标准不统一的现象更加严重。例如 <BGSound>标记和<MARQUEE>标记现在只能在微软的IE上进行解释。前者播放背景音乐, 而后者是滚动选取框。
HTML目前已经分割为两个标准,由于NetScape和IE相继推出新的版本,这种分歧已经可以用」Netscape HTML」和」Microsoft HTML」这样的说法来形容,这样对于网 站设计者来说就产生了很大的问题。
一方面,对于设计者为了建设最『酷』的网站,就必须采用最新的HTML标记,这样才能吸引用户。
另一方面,网站设计者又必须考虑到用户的浏览器,因为没有人会赞赏他看不见的网页。一旦你使用了某一家的HTML扩展,那么就意 味著失去了另外一家浏览器生产商的使用客户,要知道,现在二者各占有近一半的浏览器市场,因此对于网站设计者,这绝对是个伤脑筋 的问题,因为你很可能因此失去相当数量的潜在访问者。
由于上述,网站设计者该如何处置呢?这里面就要提到浏览器能力检测组件的使用了。
使用浏览器能力检测组件
你可以根据浏览器检测组件来判断浏览器的类型并依此来显示不同的主页,这样,你可以尽量去使用最新的HTML扩展而在不支持的浏 览器上显示别的东西。
注意
根据你的计算机安装后的Browscap.ini的版本,你可以检测到比列出的那些还要多的浏览器特性。如果希望详细了解,参考后 面介绍其检测原理的部分
你当然还可以利用ServerVariables集合来判断浏览器的分辨率,颜色数目等特性,这些只能在某些微软的浏览器上实现 。参看第14章。
默认的,可以检测到的浏览器特性如下:
■browser:顾名思义,就是浏览器类型,比如Internet Explore或者NetScape
■version:浏览器当前版本
■majorver:浏览器的主版本(小数点以前的)
■minorver:浏览器的辅版本(小数点以后的)
■frames:指示浏览器是否支持分屏方式
■tables:指示浏览器是否支持表格
■cookies:指示浏览器是否支持cookies
■backgroundsounds:指示浏览器是否支持<bgsound>标记
■vbscript:指示浏览器是否支持客户端vbscripts脚本
■javascripts:指示浏览器是否支持客户端javascripts脚本
■javaapplets:指示浏览器是否支持java applets。
■ActiveXControls:指示浏览器是否支持客户端ActiveX控件
■beta:指示浏览器是否还是测试版
■platform:检测目前用户所用的操作平台,例如,win95,winNt,或者Mac PowerPC
■win16:检测用户是用在16位的视窗(win31)系列还是32为的视窗系列(win95,winNT)。
使用浏览器能力检测组件,你需要首先创建它的一个事例,然后只需要简单的将要检测的特性名称加到事例中就可以了。下面是这样的一 个例子:
<HTML>
<HEAD><TITLE>浏览器能力检测示例</TITLE></HEAD> ;
<BODY>
<%
Set MyBrow=Server.CreateObject(「MSWC.BrowserType」)
%>
你的浏览器有如下特性:
<P>
<TABLE Border=1 Cellspacing=10>
<tr>
<td>浏览器类型</td><td><%=MyBrow.Browser %></td>
</tr><tr>
<td>分屏方式</td><td><%=MyBrow.Frames %></td>
</tr><tr>
<td>Cookies</td><td><%=MyBrow.Cookies %></td>
</tr><tr>
<td>操作平台</td><td><%=MyBrow.platform %></td>
</tr><tr>
<td>VBScript</td><td><%=MyBrow.vbscript %></td>
</tr></TABLE>
</BODY>
</HTML>
这个脚本检测用户浏览器的特性并且进行显示,对于不同的用户,显然根据其浏览器显示不同结果,下面是一个显示结果(图18.1) :
图18.1 在Netscape Navigator 4.0中的输出结果
图18.2 在Internet Explorer 4.0中的输出结果
浏览器能力检测组件是怎样工作的
如果你能够了解浏览器检测组件工作的机理,那么你就可以更好的意识到它的一些缺陷。其实这个组件还是利用了HTTP请求的Hea der和一个文本文件进行比较来获取浏览器信息。
当浏览器发出一个请求时,其中就包括了USER-AGENT的Header。这个Header 就包括了浏览器的类型和版本信息,你当然可以利用Request对象的ServerVariables集合来仔细分析这段Hea der,就是下面这个脚本:
<%=Request.ServerVariables(「HTTP_USER_AGENT」) %>
假如使用Netscape3.0,显示为:
Mozilla/3.0 (winNT; I)
需要了解的是这是唯一传递的关于浏览器的信息,浏览器能力检测就只能依靠这么个简单的信息,那么直接检测显然是做不到的。
其实浏览器检测组件是将接受到的这个Header与一个特定的文件Browscap.ini进行比较,这个文件位于服务器,当你 安装了Active Server Pages时,这个文件自动安 装,这下你应当意识到应该装最新版本了吧。
Browscap.ini只是一个文本文件,它包含了浏览器的特性,例如,对于Netscape2.0
是下面这段文本说明:
[Netscape 2.0]
browser=Netscape
version=2.0
majorver=2
minorver=0
frames=TRUE
tables=TRUE
cookies=TRUE
backgroundsounds=FALSE
vbscript=FALSE
javascript=TRUE
javaapplets=TRUE
beta=FALSE
win16=FALSE
其实浏览器能力检测组件就是依靠这个来检测浏览器能力的,你可以来改变这个文本文件,这样检测出的结果就是你觉得想要的而不是事 实上的。
有相当多的应当检测的浏览器特性没有检测到,例如,很常用的安全接口层技术(SSL)和CSS技术,由于在Browscap.i ni中没有相关信息。自然这个组件也就无从判别,但是你可以通过修改文本文件的方法来自行进行这种定义。例如,在上面的那段文本 说明后面添加下面这两行:
SSL=TRUE
CSS=FALSE
那么浏览器能力检测组件就可以对这种特性进行报告,当它检测到一个Netscape2.0时,这个组件就认为浏览器具有这两个属 性,例如,如果使用下面这个脚本,就会显示TRUE这个信息。
<%=MyBrow.SSL %>
你也许会注意到在browscap.ini文件中有这样的对浏览器的限定,如下:
[Mozilla/2.0 (Win95; U)]
parent=Netscape 2.0
platform=Win95
当浏览器具有『母』参数时,那么这个限定就会继承其它所有特性,前面这个限定就继承了所有Netscape2.0的特性,例如: 尽管没有说Win95下面的Netscape2.0是否还保留分屏方式,但是由于对Netscape2.0的特性中已经认定其支 持,所以浏览器能力检测组件依然会报告说其支持分屏。
由于母参数限定,就没有必要一遍一遍重复输入相同信息,只需要对于一些特别信息创建小的子限定就可以了。如果两种限定发生冲突, 那么子限定优先。
浏览器能力检测参数只能在browscap.ini中进行比较得出,如果谁的浏览器没有在这个文件中出现(比如哪里个大侠一时神勇 ,自己编了一个浏览器)那么将被视为默认浏览器,下面是这个默认浏览器的限定(看来不太妙)
[Default Browser Capability Settings]
browser=Default
version=0.0
majorver=#0
minorver=#0
frames=False
tables=True
cookies=False
backgroundsounds=False
vbscript=False
javascripts=False
javaapplets=False
activexcontrols=False
AK=False
SK=False
AOL=False
beta=False
win16=False
Crawler=False
CDF=False
再一次说明,这个文本你也可以进行修改(当然,首先你必须是站长),例如,你确实认为有的浏览器连表格也处理不了,就将tabl es赋值为False就行了。
注意
你可以到http://www.microsoft.com/iis目录下寻找相关部分来更新你的browscap.ini文件,也可以去第三方的网站寻找,例如www.cyscape.com/asp/browscap/。
|