控件适配器-.browser 文件

作者:vkvi 来源:ITPOW(原创) 日期:2007-11-15

在配置文件的 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 控件。

相关文章