如果您找不到符合準則的現有瀏覽器定義檔案,則可以使用在下面Example一節中的程式碼建立新的瀏覽器定義檔案。
安全性注意事項 |
|---|
| 不要從協力廠商下載或安裝瀏覽器定義檔案,除非您信任他們的來源。檢查新瀏覽器定義檔案,查看是否參考了任何不熟悉的命名空間。如需詳細資訊,請參閱 保護瀏覽器定義檔。 |
預先定義的瀏覽器定義檔案儲存在 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中。應用程式層級的瀏覽器定義檔案可以放置在應用程式的 App_Browsers 目錄中。在這兩個位置中,瀏覽器定義檔案的副檔名必須是 .browser。不要變更 ASP.NET 隨附的瀏覽器定義檔案,因為 Service Pack 可能會更新這些檔案而覆寫您的變更。而是要建立新的 .browser 檔案,並使用新 browser 定義中的 parentID 屬性來繼承設定,或使用 refID 屬性將功能加入至現有瀏覽器定義。
在執行階段,瀏覽器定義檔案資訊會合併到 BrowserCapabilitiesFactory 物件中的已知瀏覽器集合中。當發出要求時,ASP.NET 會根據要求標頭來識別要求的瀏覽器,並會編譯對應至所要求之瀏覽器類型的 HttpBrowserCapabilities 物件。這可透過先使用空白字典,然後根據瀏覽器定義樹狀目錄套用下列遞迴步驟來完成:
-
從預設瀏覽器定義開始,其永遠視為成功的符合。
-
將在這個瀏覽器定義中指定的功能值合併到此瀏覽器的功能字典中。瀏覽器定義中指定的值會覆寫在父代中設定的值。
-
評估每一子定義以判斷是否符合。針對每一符合的子系,再次從步驟 1 開始。先評估閘道定義,再評估瀏覽器定義。如果使用者代理符合多個瀏覽器定義或多個閘道定義,則會在執行階段擲回例外狀況。
會快取 HttpBrowserCapabilities 物件,並有可能再次使用它處理來自同一類型瀏覽器的不同要求。
Web 應用程式可以使用 System.Web.HttpRequest.Browser 屬性存取 HttpBrowserCapabilities 物件的目前執行個體。這個物件為唯讀,且包含每個功能的屬性。或者,Web 開發人員可以建構一個繼承自 HttpBrowserCapabilities 類別的自訂類別,並將執行個體儲存在 System.Web.HttpRequest.Browser 屬性中。
變更位於 App_Browsers 目錄中的 .browser 檔案會使快取失效,且下一個要求將造成重新編譯應用程式。但是,如果對 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的 .browser 檔案進行變更,您必須使用 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe 工具手動重新編譯應用程式,或者您必須使用 BrowserCapabilitiesCodeGenerator 類別以程式設計方式重新編譯應用程式。
注意事項 |
|---|
| 在 .NET Framework 2.0 中,使用 Web.config 檔案中的 browserCaps 項目定義瀏覽器會被取代但仍受支援。這個項目中的資料會與來自瀏覽器定義檔案的資訊合併。 |
當瀏覽器對您的應用程式發出要求時,瀏覽器的功能會被儲存在 Browser 屬性中。瀏覽器的識別會儲存在 UserAgent 屬性中。ASP.NET Web 伺服器控制項會查詢功能清單以決定如何針對不同的瀏覽器適當地調整控制項的行為。

功能
如需強型別瀏覽器功能的清單,請參閱 HttpCapabilitiesBase 類別的屬性。這些屬性在瀏覽器定義檔案中使用 Camel 命名法的大小寫慣例。例如,如果您想要在瀏覽器定義檔案中指定 BackgroundSounds 功能,請將其輸入為 backgroundSounds。
您還可以定義自己的功能。
Web 應用程式可以使用下列兩種方法的其中之一來從 HttpBrowserCapabilities 物件中擷取功能值:

預設的組態
.NET Framework 會隨附 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中預先定義的瀏覽器定義檔案。您可以在應用程式的 App_Browsers 目錄中建立應用程式層級的瀏覽器定義檔案。如需特殊 ASP.NET 目錄的詳細資訊,請參閱 ASP.NET 網站配置。
下列程式碼範例摘錄自 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的 Generic.browser 檔案。
注意事項 |
|---|
| 不要變更 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的現有瀏覽器定義檔案。這些定義檔案由 .NET Framework 維護。 |
<browsers>
<browser id="GenericDownlevel" parentID="Default">
<identification>
<userAgent match="^Generic Downlevel$" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="cookies" value="false" />
<capability name="ecmascriptversion" value="1.0" />
<capability name="tables" value="true" />
<capability name="type" value="Downlevel" />
</capabilities>
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Menu"
adapterType="System.Web.UI.WebControls.Adapters.MenuAdapter" />
</controlAdapters>
</browser>
</browsers> 下列程式碼範例摘錄自 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的 WebTV.browser 檔案。
<browsers>
<browser id="WebTV" parentID="IE2">
<identification>
<userAgent match="WebTV/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="backgroundsounds" value="true" />
<capability name="browser" value="WebTV" />
<capability name="cookies" value="true" />
<capability name="isMobileDevice" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="tables" value="true" />
<capability name="type" value="WebTV${major}" />
<capability name="version" value="${version}" />
</capabilities>
<controlAdapters markupTextWriterType="System.Web.UI.Html32TextWriter">
</controlAdapters>
</browser>
<browser id="WebTV2" parentID="WebTV">
<identification>
<capability name="minorversion" match="2" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="css1" value="true" />
<capability name="ecmascriptversion" value="1.0" />
<capability name="javascript" value="true" />
</capabilities>
</browser>
<gateway id="WebTVbeta" parentID="WebTV">
<identification>
<capability name="letters" match="^b" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="beta" value="true" />
</capabilities>
</gateway>
</browsers>