ASP Browser Capabilities 组件

ASP Browser Capabilities 组件(中文讲解)

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


1. Browser Capabilities 组件概述

  • 作用Browser Capabilities组件提供客户端浏览器的详细信息,用于动态调整页面内容或功能以适配不同浏览器。
  • 用途
  • 检测浏览器类型(如IE、Chrome、Firefox)及版本。
  • 检查是否支持JavaScript、Cookies、Frames等。
  • 根据浏览器特性提供不同内容(如简化移动端页面)。
  • 依赖:依赖MSWC.BrowserType COM对象,默认随Windows IIS安装。
  • 配置文件:依赖browscap.ini文件,存储在IIS目录(如C:\Windows\System32\inetsrv)。

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用户)。
  1. 中文支持
  • 设置<%@ Language=VBScript CodePage=65001 %>Response.Charset = "UTF-8"支持中文输出。
  • 对属性输出使用Server.HTMLEncode防止XSS:
    asp Response.Write(Server.HTMLEncode(bc.browser))
  1. 安全性
  • 避免将browscap.ini暴露在网站目录下。
  • 验证User-Agent输入,防止伪造(Request.ServerVariables("HTTP_USER_AGENT"))。
  1. 性能
  • 加载browscap.ini可能影响性能,尤其当文件较大。
  • 缓存常用浏览器属性到Application
    asp Application("browser") = bc.browser
  1. 限制
  • 依赖browscap.ini准确性,未知User-Agent可能返回默认值(如browser=Unknown)。
  • 无法检测客户端设置(如JavaScript实际禁用)。
  • 移动设备检测可能不精确,需结合其他方法(如屏幕大小)。
  1. 调试
  • 输出Request.ServerVariables("HTTP_USER_AGENT")检查客户端User-Agent
  • 验证browscap.ini是否包含对应浏览器定义。
  • 检查IIS日志或启用详细错误信息。
  1. 兼容性
  • 仅适用于经典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说明。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注