在配置文件的 system.web 元素之下有一个元素 browserCaps,该节用于浏览器识别。但在 ASP.NET 2.0 中,我们一般没有用,因为我们有更好的方法,就是利用 .browser 文件,.browser 文件可位于 App_Browsers 文件夹或 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers 中。
我们打开 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers\ie.browser,截取部分内容进行分析。
<browsers>
<browser id="IE" parentID="Mozilla">
<identification>
<userAgent match="^Mozilla[^(]*\([C|c]ompatible;\s*MSIE (?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="Opera|Go\.Web|Windows CE|EudoraWeb" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
- browsers 是根元素。
- browser 是一个或一类浏览器。
- browser 的属性 id 表示浏览器的唯一名称。
- browser 的属性 parentID 表示父浏览器的名称,比如 IE 的父浏览器是 Mozilla。
- identification 用于表示浏览器特征标识。
- userAgent 中的 match 表示需要匹配,nonMatch 表示不应该匹配。
- capture 用于捕获浏览器的信息。
- capabilities 定义要为当前的浏览器定义设置的一个功能值。
以上只是一个简介,更全面的 .browser 文件介绍请参见 MSDN 的 浏览器定义文件架构(browsers 元素)。
另外,上面的示例中省略了第一节提到的 controlAdapters,其功能已经在第一节中描述,不再重复。
第一节的 .browser 文件中有一句 <browser refID="Default">,这个 refID 又怎么解释呢?refID 表示的就是引用一个已经定义好了的浏览器名称,如果我们把该属性值改为 IE,那么第一节中说到的将 BulletedList 输出 p 就只有在 IE 浏览器中才会发生了。
定义了 refID 后就不能再使用 id 和 parentID 属性了,并且也不能使用 identification 子元素了。
总结
.browser 文件就是用来识别浏览器,再根据不同的浏览器,利用控件适配器根据设备类型改编 ASP.NET Web 服务器控件的行为,为什么要改编呢,一个典型的示例就是某些浏览器(比如移动设备)不支持某种 HTML 控件,需要改编成一个它支持的 HTML 控件。