WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

ブラウザ定義ファイル

by WebSurfer 2014年3月4日 13:32

ASP.NET には「ブラウザ定義ファイル」というものがあります。(下の画像は ASP.NET 4 用のブラウザ定義ファイルです。これとは別に ASP.NET 2.0, 3.0, 3.5 用のブラウザ定義ファイルが v2.0.50727 サブフォルダ下にあります)

ASP.NET のブラウザ判定はこれらのファイルに書かれた定義が基になるはずなのですが、実際の判定結果はファイルの内容と違うことがある・・・即ち、HttpBrowserCapabilities オブジェクトを調べないと分からない・・・という話を書きます。

ブラウザ定義ファイル

ASP.NET は、実行時に、ブラウザから送られてくる User Agent と、.browser ファイルに書かれている定義を基にブラウザの機能を判定し、ブラウザに送信する html, Javascript などの内容を調整します。詳しくは MSDN ライブラリの ブラウザー定義ファイルのスキーマ (browsers 要素) を見てください。

IE10 がリリースされた直後に、IE10 で ASP.NET ページにアクセスすると __doPostBack() などが定義されてないというスクリプトエラーが出たということがありました。この原因は、IE10 のリリース直後にはまだ ASP.NET に IE10 のブラウザ定義がなかったからです。その後の Windows Update で IE10 のブラウザ定義が追加され、問題が解消されたという経緯があります。

先日 IE11 がリリースされ、その User Agent が大幅に変更された("MSIE" という文字列が含まれなくなりました。詳しくは MSDN ライブラリの User-agent string changes を参照ください)ということで、それに伴いブラウザ定義ファイルがどう変わったかを調べてみました。

ところが、ASP.NET 2.0, 3.0, 3.5 用のブラウザ定義ファイルの内容と、ASP.NET のブラウザ判定結果(HttpRequest.Browser プロパティで取得できる HttpBrowserCapabilities オブジェクト)が、IE11 はおろか IE10 でも一致しません。(ASP.NET 4 の場合は一致しました。)

例えば、ASP.NET 3.5 のサイトで、HttpBrowserCapabilities.Version プロパティで正しく IE10, IE11 のバージョン(それぞれ 10.0, 11.0)が取得できましたが、ブラウザ定義ファイルにはどこにもそのような定義は見当たりません。

おかげで理由を調べるのに半日ぐらいハマってしまいました。(汗)

そんな時に見つけたのが MSDN Blog の記事 ASP.NET の IE10 対応について です。

詳しくはその記事を読んでいただきたいのですが、要するに、ASP.NET は「ブラウザ定義ファイル」使っておらず、System.Web.dll の中に持っているブラウザ判定ルーチンを使っているのだそうです。

また、Windows Update による更新では Sysytem.Web.dll を更新して既定のルーチンは置き換えるものの、必ずしもブラウザ定義ファイルは更新されないようです。

なんのこっちゃ・・・という感じです。(笑)

Tags:

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar