標題標題  顯示論壇會員列表名單  搜索論壇搜索  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.6406 seconds.

 
保養品
保養品, Skin Care
www.elady.tw
Makeups Wholesale
Wholesale Cosmetics SkinCares
lungjyi.com
保養品批發
名牌保養品、保養品批發
www.perfume.com.tw/skincare
Wholesale Perfumes
Fragrances Perfumes Wholesale
lungjyi.net