ブラウザ定義ファイルのスキーマ (browsers 要素)
更新 : 2007 年 11 月
ブラウザ定義ファイルには、各ブラウザの定義が含まれています。実行時に、ASP.NET は、要求ヘッダーの情報を使用して、どのタイプのブラウザが要求を行ったのかを判断します。その後、ASP.NET は、.browser ファイルを使用して、ブラウザの機能、およびそのブラウザ向けにマークアップを描画する方法を判断します。これは、デバイスのタイプに応じて ASP.NET Web サーバー コントロールの動作を適応させるコントロール アダプタを利用して、モバイル デバイスで表示できるアプリケーションを作成しようとする Web 開発者にとって便利な機能です。詳細については、「参照」セクションのリンクを参照してください。
メモ : |
---|
ブラウザ定義ファイルは、.NET Framework Version 2.0 で導入されました。旧バージョンの .NET Framework では、browserCaps 要素を使用して、構成ファイルでブラウザを定義していました。 |
browsers 要素では、次の構造が使用されます。
<browsers>
<browser id="browser name"
parentID="parent browser name"
refID="reference ID">
<identification>
<userAgent match="regular expression"
nonMatch="regular expression" />
<header match="regular expression"
name="header name"
nonMatch="regular expression" />
<capability match="regular expression"
name="capability name"
nonMatch="regular expression" />
</identification>
<capture>
<userAgent match="regular expression" />
<header match="regular expression"
name="header name" />
<capability match="regular expression"
name="capability name" />
</capture>
<capabilities>
<capability name="capability name"
value="capability value" />
</capabilities>
<controlAdapters markupTextWriterType="type name">
<adapter adapterType="name of adapter class"
controlType="name of control class" />
</controlAdapters>
<sampleHeaders>
<header name="header name"
value="header value" />
</sampleHeaders>
</browser>
<gateway id="gateway ID"
parentID="parent browser ID">
<!-- Same child elements as for <browser>.
<identification></identification>
<capture></capture>
<capabilities></capabilities>
<controlAdapters></controlAdapters>
<sampleHeaders></sampleHeaders>
-->
</gateway>
<defaultBrowser id="Default"
parentID="parent browser ID"
refID="reference ID" >
<!-- Same child elements as for <browser>.
<identification></identification>
<capture></capture>
<capabilities></capabilities>
<controlAdapters></controlAdapters>
<sampleHeaders></sampleHeaders>
-->
</defaultBrowser>
</browsers>
属性および要素
要素 |
説明 |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
adapter |
ASP.NET Web サーバー コントロールと、そのコントロールを現在のブラウザ内に描画するために使用されるアダプタの間のマップを指定します。たとえば、Nokia.browser ファイルに含まれる次の NokiaMobileBrowserRainbow ブラウザの定義は、MenuAdapter コントロール アダプタ クラスを使用して、Menu サーバー コントロールをブラウザに適応させるよう指定しています。
adapter 要素に含まれる必須の属性を次の表に示します。
adapter 要素には子要素がありません。 |
||||||||||||
browser |
単一のブラウザ定義を定義します。 browser 要素に含むことができる属性を次の表に示します。
ブラウザ定義では、refID 属性を定義するか、id 属性と parentID 属性の両方を定義する必要があります。
browser 要素には、次の子要素を 0 個または 1 個含めることができます。
|
||||||||||||
browsers |
.browser ファイルの必須のルート要素を表します。 |
||||||||||||
capabilities |
現在のブラウザ定義に設定する機能の値を定義します。厳密に型指定されたブラウザ機能のリストについては、HttpCapabilitiesBase クラスのトピックのプロパティを参照してください。これらのプロパティのうち大部分は、ブラウザ定義ファイルにおいて Camel 形式で表現されます。独自の機能の値を追加することもできます。 capabilities 要素に属性は含まれません。 capabilities 要素には、次の子要素を 0 個以上含めることができます。
|
||||||||||||
capability (capabilities の子要素) |
現在のブラウザ定義に設定する単一の機能の値を定義します。たとえば、次の機能は IE.browser ファイル内の IE ブラウザの定義で定義されています。この定義例では、Mozilla.browser ファイル内の Mozilla ブラウザの定義から他の機能を継承しています。ドル記号の後に中かっこが続き (${})、その内側にテキストが含まれている値は、identification 要素の userAgent 子要素で定義されている match 式 "^Mozilla[^(]*\([C|c]ompatible;\s*MSIE (?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))(?'extra'[^)]*)" から取り込まれた値に置き換えられます。
capability 要素には、次の必須の属性が含まれます。
capability 要素には子要素がありません。 |
||||||||||||
capability (identification または capture の子要素) |
親ブラウザ クラスの機能の値を正規表現と比較するよう指定します。たとえば、IE.browser ファイルに含まれる次の IE5to9 ブラウザの定義では、capability 要素を使用して、このブラウザがクライアントのブラウザと一致すると判断されるためには、親である IE の定義の majorversion 機能設定が、指定された正規表現と一致する必要があることを示しています。このブラウザ定義の例には、親定義に機能を追加する、または親定義の要素を上書きする capability 要素が含まれています。
capability 要素に含まれる属性を次の表に示します。match 属性または nonMatch 属性のどちらかを定義する必要がありますが、両方は定義できません。
capability 要素には子要素がありません。 |
||||||||||||
capture |
ブラウザに関する情報を取り込むために、どのような header 要素、userAgent 要素、または capability 要素を追加的に使用するかに関する情報を定義します。これは、.NET Framework 2.0 のリリース時には存在しなかった新しいブラウザを検出しようとするときに便利です。値を取り込むには、identification 要素の match 属性で定義された正規表現による取り込みをブラウザ定義に含めることができます。たとえば、IE.browser ファイルで定義されている次の userAgent 要素は、ユーザー エージェントの要求ヘッダーから画面の高さをピクセル単位で取り込みます。
またブラウザ定義では、ブラウザ クラスの識別に使用されない要求ヘッダーをスキャンすることによって、追加情報を取り込む必要がある場合があります。たとえば、次の capture 要素は、携帯電話 OpenWave のソフト キーの数を取り込みます。ソフト キーは、Windows Mobile ベースの SmartPhone の対応するハードウェア ボタンが押されたときに、メニューとコマンドを表示する機能です。
capture 要素に属性は含まれません。 capture 要素には、次の子要素を 0 個以上含めることができます。
|
||||||||||||
controlAdapters |
ブラウザ上のサーバー コントロールを適応させるために使用するコントロール アダプタを定義します。 controlAdapters 要素に含まれる属性を次の表に示します。
controlAdapters 要素には、次の子要素を 0 個以上含めることができます。
|
||||||||||||
defaultBrowser |
Default.browser ファイル内で既定のブラウザ機能を定義します。Default ブラウザ定義は、特定の物理的ブラウザとは一致しません。設定を継承するために、他の定義によって使用されます。たとえば、次の Default ブラウザ定義は、Default.browser ファイルに含まれています。
Default ブラウザ定義は、他の多くのブラウザ定義によって継承されています。たとえば、Panasonic ブラウザの次の定義は、Panasonic.browser ファイルに含まれています。 <browser id="Panasonic" parentID="Default"> defaultBrowser 要素に含まれる属性を次の表に示します。
defaultBrowser 要素には、browser 要素と同じ子要素を含めることができます。 |
||||||||||||
gateway |
単一のゲートウェイ定義を指定します。一部のモバイル ブラウザは、ゲートウェイを通じて Web サーバーに接続されます。ゲートウェイには、独自の機能を追加できます。複数のゲートウェイが同じ refID 属性を参照するよう構成できます。 gateway 要素には、browser 要素と同じ属性と子要素を含めることができます。たとえば、IE3AK ゲートウェイの次の定義は、IE.browser ファイルに含まれています。
|
||||||||||||
header (identification または capture の子要素) |
要求に含まれる特定の HTTP ヘッダーと比較する正規表現、または取り込む対象となる正規表現を指定します。たとえば、Default.browser ファイルに含まれる Wml ブラウザの次の定義では、Accept ヘッダーを 2 つの正規表現と比較することによって、一致するブラウザを識別します。
header 要素に含まれる属性を次の表に示します。match 属性または nonMatch 属性のどちらかを定義する必要がありますが、両方は定義できません。
header 要素には子要素がありません。 |
||||||||||||
header (sampleHeaders の子要素) |
このブラウザの単一のサンプル ヘッダーを指定します。この要素はオプションで、情報提供のみを目的としています。シミューレタまたはデバッグ ツールは、この一連のヘッダーを使用して、ブラウザによる要求をエミュレートできます。 header 要素に含まれる属性を次の表に示します。
header 要素には子要素がありません。 |
||||||||||||
identification |
受信した要求からこのブラウザを識別する方法に関する情報を定義します。 identification 要素に属性は含まれません。 identification 要素には、次の子要素を 1 個以上含むことができます。
|
||||||||||||
sampleHeaders |
このブラウザの一連のサンプル ヘッダーを指定します。この要素はオプションで、情報提供のみを目的としています。シミューレタまたはデバッグ ツールは、この一連のヘッダーを使用して、ブラウザによる要求をエミュレートできます。 sampleHeaders 要素に属性は含まれません。 sampleHeaders 要素には、次の子要素を 0 個以上含めることができます。
|
||||||||||||
userAgent |
要求のユーザー エージェント ヘッダーと比較する式を指定します。たとえば、IE.browser ファイルに含まれる IE4 ブラウザの次の定義では、ブラウザが要求と共に送信するユーザー エージェント ヘッダーに文字列 "MSIE 4" が含まれるかどうかによって、ブラウザを識別します。
userAgent 要素に含まれる属性を次の表に示します。match 属性または nonMatch 属性のどちらかを定義する必要がありますが、両方は定義できません。
userAgent 要素には子要素がありません。 |
解説
既存のブラウザ定義ファイルの中に条件に合うものがない場合は、以下の「使用例」セクションに記載されたコードを使用して新しいブラウザ定義ファイルを作成できます。
セキュリティに関するメモ : |
---|
サードパーティのブラウザ定義ファイルは、その提供元を信頼できない場合、ダウンロードまたはインストールしないでください。新しいブラウザ定義ファイルで、未知の名前空間が参照されていないかどうか確認してください。詳細については、「ブラウザ定義ファイルの保護」を参照してください。 |
定義済みのブラウザ定義ファイルは、%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 アプリケーションは、HttpRequest.Browser プロパティを使用して、HttpBrowserCapabilities オブジェクトの現在のインスタンスにアクセスできます。このオブジェクトは読み取り専用で、各機能のプロパティを格納しています。別の方法として、HttpBrowserCapabilities クラスを継承するカスタム クラスを構築して、インスタンスを 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>
使用例
次のコード例は、ブラウザ定義ファイルの構築に使用できる空の .browser ファイルです。独自のブラウザ ファイルでは、循環参照を作成しないよう注意してください。
<?xml version="1.0" encoding="utf-8"?>
<browsers>
<browser id="NewBrowser" parentID="Mozilla">
<identification>
<userAgent match="Unique User Agent Regular Expression" />
</identification>
<capture>
<userAgent match="NewBrowser (?'version'\d+\.\d+)" />
</capture>
<capabilities>
<capability name="browser" value="My New Browser" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<browser refID="Mozilla">
<capabilities>
<capability name="xml" value="true" />
</capabilities>
</browser>
</browsers>
要素情報
構成セクション ハンドラ |
|
構成メンバ |
|
構成できる場所 |
マシンのルート レベルの Browsers ディレクトリ アプリケーション レベルの App_Browsers ディレクトリ |
必要条件 |
Internet Information Services (IIS) 5.0、IIS 5.1、または IIS 6.0 .NET Framework Version 2.0 Visual Studio 2005 |
参照
処理手順
方法 : ASP.NET Web ページでブラウザの種類を検出する
概念
ASP.NET Web サーバー コントロールとブラウザの機能
参照
HttpCapabilitiesSectionHandler
deviceFilters 要素 (ASP.NET 設定スキーマ)
mobileControls 要素 (ASP.NET 設定スキーマ)
browserCaps 要素 (ASP.NET 設定スキーマ)