ASP Browser Capabilities 组件(中文讲解)

在经典Active Server Pages(ASP)中,Browser Capabilities组件(MSWC.BrowserType)用于检测客户端浏览器的功能和特性。它通过分析HTTP请求的User-Agent头并结合服务器上的浏览器能力配置文件(browscap.ini)来确定浏览器的类型、版本、支持的功能(如JavaScript、Cookies等)。以下是对ASP Browser Capabilities组件的详细讲解,包括原理、配置、示例和注意事项。


1. Browser Capabilities 组件概述

2. browscap.ini 文件
  • 作用browscap.ini是一个文本文件,定义了浏览器User-Agent字符串与功能的映射。

  • 位置:默认位于C:\Windows\System32\inetsrv\browscap.ini

  • 格式:INI格式,包含浏览器标识和属性:

    [Mozilla/5.0 (*Chrome/*)]
    browser=Chrome
    version=0
    majorver=0
    minorver=0
    frames=True
    tables=True
    cookies=True
    javascript=True
    platform=Win32
    
    • 每个[User-Agent]部分定义一个浏览器模式。
    • 属性包括browser(名称)、version(版本)、platform(操作系统)等。
  • 更新:默认browscap.ini可能过时,需从第三方(如http://browscap.org)下载最新版本并替换。


3. 创建 Browser Capabilities 对象

使用Server.CreateObject("MSWC.BrowserType")创建对象:

<%
Set bc = Server.CreateObject("MSWC.BrowserType")
%>
  • 访问属性:直接通过对象访问浏览器属性:
    Response.Write("浏览器:" & bc.browser & "<br>")
    Response.Write("版本:" & bc.version)
    

4. 常用属性

Browser Capabilities组件返回的属性取决于browscap.ini中的定义。常用属性包括:

  • browser:浏览器名称(如ChromeIE)。
    Response.Write(bc.browser)
    
  • version:浏览器版本(完整版本,如120.0)。
    Response.Write(bc.version)
    
  • majorver:主版本号(如120)。
  • minorver:次版本号(如0)。
  • platform:操作系统(如Win32Android)。
  • javascript:是否支持JavaScript(True/False)。
  • cookies:是否支持Cookies(True/False)。
  • frames:是否支持HTML框架(True/False)。
  • tables:是否支持HTML表格(True/False)。
  • mobiledevice:是否为移动设备(True/False)。

5. 示例代码
(1) 显示浏览器信息

检测并显示客户端浏览器信息:

<%@ Language=VBScript CodePage=65001 %>
<xaiArtifact artifact_id="cb106aba-1db9-40e6-9451-68be4765a964" artifact_version_id="66fdab7c-204e-4065-a647-ff0eb3d89328" title="browser_info.asp" contentType="text/asp">
<%
Response.Charset = "UTF-8"
Set bc = Server.CreateObject("MSWC.BrowserType")
Response.Write("<h1>浏览器信息</h1>")
Response.Write("浏览器:" & Server.HTMLEncode(bc.browser) & "<br>")
Response.Write("版本:" & bc.version & "<br>")
Response.Write("主版本:" & bc.majorver & "<br>")
Response.Write("次版本:" & bc.minorver & "<br>")
Response.Write("平台:" & Server.HTMLEncode(bc.platform) & "<br>")
Response.Write("支持JavaScript:" & bc.javascript & "<br>")
Response.Write("支持Cookies:" & bc.cookies & "<br>")
Response.Write("是移动设备:" & bc.mobiledevice & "<br>")
Set bc = Nothing
%>
</xaiArtifact>
  • 输出示例(假设客户端为Chrome 120.0):
    浏览器信息
    浏览器:Chrome
    版本:120.0
    主版本:120
    次版本:0
    平台:Win32
    支持JavaScript:True
    支持Cookies:True
    是移动设备:False
    
(2) 动态调整内容

根据浏览器特性显示不同内容:

<%@ Language=VBScript CodePage=65001 %>
<xaiArtifact artifact_id="b2ee7935-a137-4303-a1ce-17a75540191a" artifact_version_id="6e43550c-f3ba-4323-b486-9c3d423e7199" title="browser_adaptive.asp" contentType="text/asp">
<%
Response.Charset = "UTF-8"
Set bc = Server.CreateObject("MSWC.BrowserType")
If bc.mobiledevice = True Then
    Response.Write("<h1>欢迎使用移动设备</h1>")
    Response.Write("<p>简化的移动版页面</p>")
ElseIf bc.javascript = False Then
    Response.Write("<h1>您的浏览器不支持JavaScript</h1>")
    Response.Write("<p>请启用JavaScript或升级浏览器</p>")
Else
    Response.Write("<h1>欢迎使用桌面浏览器</h1>")
    Response.Write("<script>alert('欢迎访问!');</script>")
End If
Set bc = Nothing
%>
</xaiArtifact>
(3) 检查浏览器兼容性

限制不支持Cookies的浏览器:

<%@ Language=VBScript CodePage=65001 %>
<xaiArtifact artifact_id="e3188581-74d6-4a81-91c5-51fe489a5c22" artifact_version_id="19b29612-aecd-4bd1-9c5c-fa16cd0fcf8a" title="browser_cookies_check.asp" contentType="text/asp">
<%
Response.Charset = "UTF-8"
Set bc = Server.CreateObject("MSWC.BrowserType")
If bc.cookies = False Then
    Response.Write("<h1>错误</h1>")
    Response.Write("<p>您的浏览器不支持Cookies,请启用Cookies或更换浏览器。</p>")
    Response.End
End If
Response.Write("<h1>欢迎</h1>")
Response.Write("<p>您的浏览器支持Cookies,可以继续访问。</p>")
Set bc = Nothing
%>
</xaiArtifact>

6. 注意事项
  1. browscap.ini 更新

    • 默认browscap.ini可能不包含最新浏览器(如现代Chrome、Edge)。
    • 从http://browscap.org下载最新版本,替换到C:\Windows\System32\inetsrv
    • 确保文件权限允许IIS读取(IUSR用户)。
  2. 中文支持

    • 设置<%@ Language=VBScript CodePage=65001 %>Response.Charset = "UTF-8"支持中文输出。
    • 对属性输出使用Server.HTMLEncode防止XSS:
      Response.Write(Server.HTMLEncode(bc.browser))
      
  3. 安全性

    • 避免将browscap.ini暴露在网站目录下。
    • 验证User-Agent输入,防止伪造(Request.ServerVariables("HTTP_USER_AGENT"))。
  4. 性能

    • 加载browscap.ini可能影响性能,尤其当文件较大。
    • 缓存常用浏览器属性到Application
      Application("browser") = bc.browser
      
  5. 限制

    • 依赖browscap.ini准确性,未知User-Agent可能返回默认值(如browser=Unknown)。
    • 无法检测客户端设置(如JavaScript实际禁用)。
    • 移动设备检测可能不精确,需结合其他方法(如屏幕大小)。
  6. 调试

    • 输出Request.ServerVariables("HTTP_USER_AGENT")检查客户端User-Agent
    • 验证browscap.ini是否包含对应浏览器定义。
    • 检查IIS日志或启用详细错误信息。
  7. 兼容性

    • 仅适用于经典ASP,ASP.NET使用HttpBrowserCapabilities类。
    • 确保IIS启用MSWC组件(默认启用)。

7. 与Request/Response/Application/Session的关系
  • Request:提供User-Agent头,Browser Capabilities基于此解析:
    userAgent = Request.ServerVariables("HTTP_USER_AGENT")
    Response.Write("User-Agent: " & Server.HTMLEncode(userAgent))
    
  • Response:输出浏览器信息或调整内容:
    Response.Write("浏览器:" & bc.browser)
    
  • Application:存储全局浏览器统计:
    Application.Lock
    Application("browser_" & bc.browser) = Application("browser_" & bc.browser) + 1
    Application.Unlock
    
  • Session:记录用户浏览器信息:
    Session("browser") = bc.browser
    

8. 总结

ASP的Browser Capabilities组件通过MSWC.BrowserTypebrowscap.ini提供客户端浏览器信息,用于动态调整页面内容。适合检测浏览器类型、版本及功能,但依赖配置文件准确性。注意更新browscap.ini、中文编码、安全性和性能优化,确保代码健壮。更多细节可参考微软官方文档或W3Schools中的BrowserType说明。

Logo

更多推荐