标题标题  显示论坛会员列表名单  搜索论坛搜索  HelpHelp
  注册注册  登入登入
ASP教学区
 DoReMe : ASP教学区
主题 话题: 第十八章 对浏览器的处理 回复发表新主题
作者
贴子内容 << Prev Topic下一个主题 >>
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回复: 103
Posted: 2005/1月/07 10:01上午 | IP记录 引用 bibi

对浏览器的处理

在Active Server Pages中使用组件
浏览器能力检测组件
使用浏览器能力检测组件的一个实例

 

 

这一章首先介绍在Active Server Pages中包含ActiveX组件。第一部分是介绍一些将组件结合在Active Server Pages的全面介绍。在下一个部分,你会学会如何使用浏览器能力检测组件,最后是一个使用的实例。

Back to Top 查看 bibi's 资料 搜索其它贴子 bibi 访问 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回复: 103
Posted: 2005/1月/07 10:16上午 | IP记录 引用 bibi

在Active Server Pages中使用组件

前面的章节介绍了怎样使用Active Server Pages的内置对象,例如Request对像和 Response对象。Active Server Pages组件和这些对像十分近似。不过,组件和Active Server Pages的结合并不十分紧密,只是来扩展内置对象的核心函数。

 

你可以利用你所喜欢的语言,诸如Visual Basic, C++, Java,以及Delphi等等来创建自己的组件。这样做你可以参考本书的第28章。你还可以从第三方公司购买一些现成的组件使 用。例如:Software FX公司销售一些可以使你利用Active Server Pages轻松制作图表的组件(参见http://www.softwarefx.com)。最后,微软提供了相当数量的免费的ActiveX组件,你会在这章和下一章来学会一些使用它们的的手段方法。

 

在你使用一个组件之前,你需要首先创建一个它的事例,你可以在任何一个ASP文件中随意的运用内置对象的属性、方法、集合,但是 对于组件,你必须在特定范围内创建事例来运用它,下面部分,你会学会怎样在页面,session, application的范围 内创建组件事例。

 

在页面范围内创建组件

很多场合下,你创建的事例实在页面范围内,那么一个组件就只能生存在特定的页面内,这时你不能将这个组件在其它页面中应用,或者 去其它页面重新创建,创建这么一种组件,你需要使用Server.CreateObject()方法。

 

注意

为了保险起见,不提倡使用VBScript的CreatObject方法以及JSCript的JSCript的新的Create Object语句来创建组件事例,这样做会带来意想不到的问题,一般都是使用Active Server Pages的Server.CreateObject()方法。

 

下面是在页面范围内创建一个组件的例子:

 

<%

Set MyBrow=Server.CreateObject(「MSWC.BrowserType」)

%>

 

这个脚本就创建了一个浏览器能力检测组件的事例,这个事例赋给变量MtBrow。请注意这里面使用了VBScript的Set语 句。因为你在对一个组件的事例进行赋值操作,那么这个Set语句就是必不可少的。

 

注意

如果希望对每一个组件的创建都有所了解,那么参见附录A。

这种创建方法和JScript十分类似,不过,在JScript中你必须利用Var语句来进行这种操作。

 

注意

Jscript和VBScript最大的区别是前者区分大小写而后者不是。编写脚本时请特别注意。

 

下面是利用Var语句的例子:

<%

var MyBrow=Server.CreatObject(「MSWC.BrowserType」)

%>

 

微软提醒您尽量创建页面范围的组件事例,这样对服务器的负担就相对小一些。当页面结束时,该组件事例相应结束,释放所有占用的资 源和内存。

 

在Session范围内创建组件事例

在Session范围内进行这种操作有两种方法,一种还是利用Server.CreatObject()方法,和前面一样,见下 面的例子:

 

<%

Set Session(「MyBrow」)=Server.CreateObject(「MSWC.BrowserType」)

%>

 

这个脚本将浏览器能力检测组件事例赋给了Session变量MtBrow。那么这个变量就可以随著这个用户在每一个页面中使用。 你可以将这个脚本放在Global.asa或者其它任何Active Server Pages中。

 

这样创建的缺点是,该对像会立即被创建,即使不去使用,也在白白的占用资源。

幸好,还有一种在Session范围内进行组件创建的方式,你可以在Global.asa中利用微软的<OBJECT&g t;标记进行创建。如下:

 

<OBJECT RunAt=」Server」 SCOPE=」Session」 ID=」MyBeow」 ProGid=」MSWC.BrowserType」</Object>

 

这个例子中使用了HTML的<OBJECT>标记来创建一个浏览器能力检测组件的事例。其中的SCOPE属性指示该 组件将在session范围内进行创建。ID属性为这个事例进行认证以区分于其它事例。这样你就可以在你的脚本中进行引用。PR OGID被用来限定组件的注册名。这是Server在进行事例创建时进行认证的依据。这和你用Server.CreateObj ect()方法时指定的名称是一致的。

 

当你在Global.asa中使用<OBJECT>对像时,你必须把它放在任何一个事件之外,千万不要把它放在某一 个事件的脚本程序中。

 

注意

你还可以利用组件注册码来代替注册名,(如果你真的喜欢这样做),这里面需要指定ClassID属性,见下面这个脚本:

<OBJECT RUANT=Server SCOPE=」Session」 ID=」MyBrow」

CLASSID=」0ACE4881-8305-11CF-9427-444553540000」></OBJEC T>

 

当一个组件以上述两种任何一种方式创建之后,对于这个Session的用户来说就可以在Session结束前在任何界面操作这个 事例的方法、熟悉功能、集合。

 

不过,这样对于每一个用户都要创建一个特定的事例,这样在用户较多时对资源的占用就比较可怕了。

 

那么你什么时候需要创建一个Session范围内的组件事例呢?在第21章中,你会学会怎样使用Ad Rotator组件,这种组件用于以不同频率显示不同的广告条,如果你希望在相当多的页面上进行这种选择,那么就需要将Ad Rotator组件事例赋给 Session变量。

 

在Application范围内创建组件

当你在Application范围内创建了组件事例,那么你可以把它当作内置对像进行处理,一旦创建,在任何页面,对于任何用户 ,使用任何方法、集合以及属性都是可以的。直到这个Application结束(网站服务终止,Global.asa改变,该a pplication卸载)。

 

注意

如果一个application范围的组件被创建,那么它的OnStartPage()和OnEndPage方法就无法调用。也 许你在使用时会遇到这个问题。

你可以用和创建一个Session范围的组件十分类似的方法创建一个application范围的组件。第一种自然还是利用Se rver.CreateObject()方法进行,见下例:

 

<%

Set Application(「MyBrow」)=Server.CreateObject(「MSWC.BrowserType」 )

%>

 

这里面,浏览器能力检测组件被赋给了一个application变量。你可以把这个脚本放在Global.asa文件的appl ication_OnStart事件中,也可以在你认为合适的页面中进行。在这个组件事例创建成功后,你就完全可以把它当作Ac tive Server Page的内置 对像来处理。


你当然还可以利用HTML的<Object>标记进行这种操作,如下:

 

<OBJECT RUNAT=」Server」 SCOPE=」Application」 ID=」MyBrow」

PROGID=」MSWC.BrowserType」></OBJECT>

 

在上面这个例子中,<Object>被用来创建一个application范围的组件事例。其中的SCOPE属性指 定了这是一个application范围的事例而不是Session范围。其它的和上一个小节没有什么区别。

 

同样,你可以把<Object>放在Global.asa文件中,不过,再次提醒,千万不要自作聪明的放在任何事件 的脚本程序中。

 

什么时候你需要创建一个application范围的组件呢?第17章检测站上用户的那个小节就是个典型的例子,该字典对象的事 例用来跟踪所有人的信息,同时覆盖几乎所有页面,因此必须用application范围的变量,否则无法实现。

Back to Top 查看 bibi's 资料 搜索其它贴子 bibi 访问 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回复: 103
Posted: 2005/1月/07 10:17上午 | IP记录 引用 bibi

浏览器能力检测组件

对于互连网络迅猛发展的一个解释就是其开放的标准,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/

Back to Top 查看 bibi's 资料 搜索其它贴子 bibi 访问 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回复: 103
Posted: 2005/1月/07 10:46上午 | IP记录 引用 bibi

使用浏览器能力检测组件的一个实例

这部分介绍一些这个组件所可能的应用。这个例子不仅是说明怎样使用,也提出了它的一些局限。

 

在例子18.1中显示的,浏览器能力检测组件被用来检测浏览器是否可以使用分屏方式,如果可以,那么就显示一个分屏方式的主页, 否则用户将被警告并被建议使用新版本的浏览器。

 

例子18.1 CheckFrames.asp

 

<%

Set MyBrow=Server.CreateObject(「MSWC.BrowserType」)

IF MyBrow.Frames THEN

%>

<HTML>

<HEAD><TITLE>分屏方式示例</TITLE></HEAD>

<FRAMESET COLS=」100,*」>

<FRAME SRC=」Menu.asp」>

<FRAME SRC=」Body.asp」>

</FRAMESET>

</HTML>

<% ELSE %>

<HTML>

<HEAD><TITLE>无分屏之界面</TITLE></HEAD>

<BODY>

 

我们发现您的浏览器不能支持分屏方式,

您正在使用<%=MyBrow.browser %>浏览器(版本<%=MyBrow.version %>)。

你应当下载最新版本的浏览器,这里推荐访问:

<p><a href=」www.netscape.com」>网景公司</a>

<p>或者

<p><a href=」www.microsoft.com」>微软公司</a>

</body>

</html>

<% END IF %>

 

这个Active Server Pages文件就会根据条件显示两个不同的页面,如果浏览器能力检测组件认为用户的浏览器可以适用分屏,那么就显示分屏模式的页 面,否则就显示警告信息,并推荐用户下载新版本的浏览器。请主义在第二个界面中还包括了用户浏览器类型和版本信息。这个例子并没 有指出哪里些浏览器是可以用的,不过该组件也确实不是用于这种目的,不过这样会带来很多讨厌的问题。

 

一个很头疼的问题是,即使用户用非常新版本的浏览器,(很可能是太新的版本),由于服务端的ini文件中还没有收录它的信息,那 么就会显示第二页,如下面显示结果(图18.3)。

图18.3 显示结果

 

没办法,浏览器能力检测组件没有判断出这个最新版本,那么脾气不好的访问者也许要骂人了。这种缺点主要还是因为ini文件更新的 速度跟不上,而且现在新技术、新版本的推出速度实在是越来越快。那么,尽可能的,应当去选用HTML自己的判断手段,例如,对于 同样目的,有一个非常简单的方式就是使用<NOFRAMES>标记,在第7章中有很多类似的方法介绍。

 

总结

在这章中,你应当学会了怎样将ActiveX组件结合到Active Server Pages中,同时 学会分别在页面范围内、Session范围内、application范围内创建一个组件事例。最后是一个有关浏览器能力检测组 件的例子应用,这个例子也说明了该组件的局限所在。

Back to Top 查看 bibi's 资料 搜索其它贴子 bibi 访问 bibi's
 

如果你想回复的话你必须首先 login
如果你还没有注册的话你必须首先 注册

  回复发表新主题
显示可打印的页面 显示可打印的页面

论坛跳转
不能 张贴新论题在这个讨论版
不能 回应论题在这个讨论版
不能 删除你的发言在这个讨论版
不能 编辑你的发言在这个讨论版
不能 新增投票标题在这个讨论版
不能 在这个讨论版投票

Edit by doreme Forums version 2004
Welcome ©2001-2004 doreme Guide

This page was generated in 0.1875 seconds.

 
保养品
保养品, Skin Care
www.elady.tw
美材批发
美材, Cosmetic
www.elady.tw/beauty_org
保养品批发
名牌保养品、保养品批发
gb.perfume.com.tw/skincare
饰品批发
饰品、饰品批发
gb.perfume.com.tw/ornament