既存のブラウザ定義ファイルの中に条件に合うものがない場合は、以下の「使用例」セクションに記載されたコードを使用して新しいブラウザ定義ファイルを作成できます。
セキュリティに関するメモ |
|---|
| サードパーティーのブラウザ定義ファイルは、その出典を信頼していない限り、ダウンロードまたはインストールしないでください。新しいブラウザ定義ファイルで、未知の名前空間が参照されていないかどうか確認してください。詳細については、「ブラウザ定義ファイルの保護」を参照してください。 |
定義済みのブラウザ定義ファイルは、%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers ディレクトリに格納されています。アプリケーションレベルのブラウザ定義ファイルは、アプリケーションの App_Browsers ディレクトリに格納できます。どちらの場所でも、ブラウザ定義ファイルには .browser というファイル名拡張子を付けてください。ASP.NET に付属のブラウザ定義ファイルは変更しないでください。これは、Service Pack によってそれらのファイルが更新され、変更が上書きされる可能性があるためです。代わりに、新しい .browser ファイルを作成し、新しい browser 定義の中で parentID 属性を使用して設定を継承するか、refID 属性を使用して既存のブラウザ定義に機能を追加します。
実行時に、ブラウザ定義ファイルの情報は、BrowserCapabilitiesFactory オブジェクト内の既知のブラウザのコレクション内にマージされます。要求が行われると、ASP.NET は、要求ヘッダーによって要求の送信元ブラウザを識別し、その送信元ブラウザのタイプに応じた HttpBrowserCapabilities オブジェクトをコンパイルします。この処理は、ディクショナリが空の状態から開始され、ブラウザ定義ツリーに対して次の手順を再帰的に実行することによって行われます。
-
既定のブラウザ定義から開始されます。この定義は、常に一致するものと見なされます。
-
このブラウザ定義で指定されている機能の値を、このブラウザの機能ディクショナリにマージします。ブラウザ定義で指定されている値が、親定義で設定されている値をオーバーライドします。
-
各子定義を評価して、一致するかどうかを判断します。一致する各子定義について、手順 1 から再度実行します。ブラウザ定義は、ゲートウェイ定義の後で評価されます。ユーザー エージェントが 1 つ以上のブラウザ定義または 1 つ以上のゲートウェイ定義と一致する場合は、実行時に例外がスローされます。
HttpBrowserCapabilities オブジェクトはキャッシュされ、同じタイプのブラウザからの別の要求に再利用される場合があります。
Web アプリケーションは、System.Web.HttpRequest.Browser プロパティを使用して、HttpBrowserCapabilities オブジェクトの現在のインスタンスにアクセスできます。このオブジェクトは読み取り専用で、各機能のプロパティを格納しています。別の方法として、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 クラスを使用してプログラムでアプリケーションを再コンパイルする必要があります。
メモ |
|---|
| Web.config ファイル内で browserCaps 要素を使用してブラウザを定義する方法は、.NET Framework 2.0 では使用されませんが、サポートは継続しています。この要素内のデータは、ブラウザ定義ファイルの情報とマージされます。 |
ブラウザがアプリケーションに対して要求を行うと、ブラウザの機能が Browser プロパティに格納されます。ブラウザの ID は、UserAgent プロパティに格納されます。ASP.NET Web サーバー コントロールは、機能のリストに問い合わせて、コントロールの動作をさまざまなブラウザに適応させる方法を決定します。

機能
厳密に型指定されたブラウザ機能のリストについては、HttpCapabilitiesBase クラスのトピックのプロパティを参照してください。これらのプロパティは、ブラウザ定義ファイルにおいて Camel 形式で表されます。たとえば、ブラウザ定義ファイルで BackgroundSounds 機能を指定する場合は、backgroundSounds と入力します。
独自の機能の値を定義することもできます。
Web アプリケーションは、次の 2 つの方法のうちいずれかを使用して、HttpBrowserCapabilities オブジェクトから機能の値を取得できます。
-
機能のディクショナリにアクセスします。この方法は、カスタムの機能に使用できます。
たとえば、現在のクライアントのブラウザの ECMAScript (JavaScript) 機能の値を取得するには、次のコードを使用します。
String cap_javascript = Request.Browser["javascript"];
-
機能をラップする厳密に型指定されたプロパティを呼び出します。
たとえば、現在のクライアントのブラウザの ECMAScript 機能の値を取得するには、次のコードを使用します。
String cap_javascript = Request.JavaScript;

既定の構成
.NET Framework には、定義済みのブラウザ定義ファイル (%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers ディレクトリ) が付属しています。アプリケーションの App_Browsers ディレクトリ内にアプリケーション レベルのブラウザ定義ファイルを作成することもできます。特殊な ASP.NET ディクショナリの詳細については、「ASP.NET Web サイトのレイアウト」を参照してください。
次のコード例は、%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>