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/。
|