动态网站设计十八般武艺 ASP篇(二)

    本篇将继续介绍一些用ASP编写的WEB动态功能。由于WEB浏览器标准的不一致从而使得如何能够让自己制作的网站去适应各种不同的浏览器成为了广大网站设计者最为头疼的事,在如今的形势之下,我们不肯也不可能去抛弃Netscape或IE中的任何一种客户群,但我们有时候又不得不去考虑客户端浏览器的实际浏览效果,过去我们常用JavaScript编写一段程序来辨别客户端使用的不同的浏览器,那么今天就让我们来看看如何使用ASP更为便捷且精确地达到这一目的。将以下代码,剪贴到你的Notebook中,并保存为browser.asp。

<%@LANGUAGE=VBScript%>

<HTML>

<HEAD>

<TITLE>用ASP提供的浏览器性能组件来辨别客户浏览器</TITLE>

</HEAD>

<BODY BGCOLOR="White" topmargin="10" leftmargin="10">

<font size="4" face="Arial,Helvetica">

<b>用ASP提供的浏览器性能组件来辨<br>别客户浏览器</b></font><br>

<hr size="1" color="#000000">

<!--定义并创建浏览器性能对象-->

<%

Dim bc

Set bc=Server.CreateObject("MSWC.BrowserType")

%>

<!--在表格中描述客户浏览器的信息-->

<Table border=1>

<tr>

<td>Browser Name</td>

<td><%=bc.Browser%></Td>

<tr>

<td>Browser Version</td>

<td><%=bc.Version%></Td>

<tr>

<td>Major Version</td>

<td><%=bc.Majorver%></Td>

<tr>

<td>Minor Version</td>

<td><%=bc.Minorver%></Td>

<tr>

<td>Frame Support</td>

<td><%=bc.Frames%></Td>

<tr>

<td>Table Support</td>

<td><%=bc.Tables%></Td>

<tr>

<td>Cookie Support</td>

<td><%=bc.Cookies%></Td>

<tr>

<td>Background Sound Support</td>

<td><%=bc.Background Sounds%></Td>

<tr>

<td>VB Script Support</td>

<td><%=bc.VB Script%></Td>

<tr>

<td>Java Script Support</td>

<td><%=bc.JavaScript%></Td>

</table>

</BODY>

</HTML>

  用http方式浏览该文件,根据使用的浏览器的不同,你会看到类似下图(Asp2b.gif)的页面。在本例中我们用到了一个ASP提供的ActiveX组件--"BrowserCapabilities"。 ActiveX组件作为基于Web的应用程序部分在Web服务器上运行,组件提供了应用程序的主要功能(如访问、修改数据库等),这样WEB设计者们就不必创建或重新创建执行这些任务的代码,从而提高了工作的效率,有关ActiveX组件将在今后详细讨论。为了使用ASP辨别客户浏览器,在这里我们利用"BrowserCapabilities"组件创建了一个BrowserType对象,该对象提供带有客户端网络浏览器功能说明的用户脚本,当浏览器连接到网络服务器上时,它会自动发送一个UserAgentHTTP标题,该标题是一个声明浏览器及其版本的ASCII字符串。此BrowserType对象将该标题和在Browscap.ini文件中的项进行比较(Win98、IIS3、IIS4的用户分别可以在以下目录中"win98\system\inersrv"、"\winnt\system32\inetsrv\asp\cmpnts"、"\winnt\system32\inetsrv"找到该文件)。如果找到匹配的项,则该BrowserType对象将认为浏览器列表属性与UserAgent标题匹配。若该对象在browscap.ini文件中找不到与该标题匹配的项,那么将使用默认的浏览器属性。若该对象既未找到匹配项且browscap.ini文件中也未指定默认的浏览器设置,则它将每个属性都设为字符串"UNKNOWN"。我们可以通过更新browscap.ini文件将属性或新的浏览器定义添加到该组件中,从而扩大ASP识别的浏览器范围和精确度。下面列出了browscap.ini中的一部分内容(不包括注释部分):

[IE 4.0] ;;HTTPUserAgentHeader
browser=IE;;指定该浏览器的名称。
Version=4.0;;指定该浏览器的版本号。
majorver=4;;指定主版本号
minorver=0;;指定副版本号
frames=TRUE;;指定该浏览器是否支持框架。
tables=TRUE;;指定该浏览器是否支持表格。
cookies=TRUE;;指定该浏览器是否支持cookies。
backgroundsounds=TRUE;;指定该浏览器是否支持背景音乐。
vbscript=TRUE;;指定该浏览器是否支持VBScript。
javascript=TRUE;;指定该浏览器是否支持JScript。
javaapplets=TRUE;;指定该浏览器是否支持Java程序。
ActiveXControls=TRUE;;指定该浏览器是否支持ActiveX控件。
Win16=False;;指定该浏览器是否支持Win16
beta=False;;指定该浏览器是否测试版。
cdf=True;;指定该浏览器是否支持用于Web预测的ChannelDefinitionFormat。

;;ie4.01
[Mozilla/4.0(compatible;MSIE4.01*;Windows95)]
parent=IE4.0;;父标签允许第二个浏览器继承第一个浏览器的定义
version=4.01
minorver=01
platform=Win98

;;DefaultBrowser;;指定默认的浏览器的设置
[DefaultBrowserCapabilitySettings]
browser=Default
frames=FALSE
tables=TRUE
cookies=FALSE
backgroundsounds=FALSE
vbscript=FALSE
javascript=FALSE

    在上面的例子中,父标签允许第二个浏览器继承第一个浏览器的定义,以便MicrosoftInternetExplorer4.01定义得以继承MicrosoftInternetExplorer4.0定义全部的属性(例如,frames=TRUE、tables=TRUE以及cookies=TRUE)。并通过添加platform=Win98行来指定平台,用version=4.01重写版本信息。

    在先前的browser.asp中我们仅仅是将客户浏览器的属性一一罗列了出来,下面让我们添加一些动态的效果。将以下代码剪贴到文件browser.asp中(编辑注:为显示方便,所有“<”符号后都多加了个空格,实际使用时请注意去掉。):

<%if (bc.frames=TRUE) then%>

你的浏览器支持框架!<br>

<%else%>

难道现在你还在使用不支持框架的浏览器???<br>

<%end if%>

<%if (bc.tables=TRUE) then%>

你的浏览器支持表格。<br>

<%else%>

难道现在你还在使用不支持表格的浏览器???<br>

<%end if%>

<%if(bc.BackgroundSounds=TRUE)then%>

有没有听到美妙的音乐???<br>

<%else%>

可惜,您的浏览器不支持背景音乐。<br>

<%endif%>

<%if(bc.vbscript=TRUE)then%>

您的浏览器支持Vbscript。<br>

<%else%>

您的浏览器不支持Vbscript。<br>

<%endif%>

<%if(bc.javascript=TRUE)then%>

您的浏览器支持Javascript。<br>

<%else%>

您的浏览器不支持Javascript。<br>

<%endif%>

    在你的浏览器中刷新browser.asp,程序将自动辨别浏览器的属性并动态显示不同的信息。不难发现在整个browser.asp文件中几乎没有用到任何复杂的编程,就轻而易举的达到了动态鉴别客户浏览器并动态产生响应事件的效果。事实上,这个程序的关键就在于前文提到的ActiveX组件--"BrowserCapabilities",它的作用类似于一个Function,只需简单地在程序中调用该组件即能达到你所希望的效果。