2013年12月22日日曜日

ASP.NET が Internet Explorer の検出に失敗する

ASP.NET (IIS7.5)上のページをIE10で見ようとしたら、「_doPostBack」でエラーが発生。

調べたらユーザーエージェント判定スクリプトの問題だった。
IE10が検出できず、ASP.NETで自動生成する_doPostBack」を含むJavascriptが
取得できてなかったということ。

http://msdn.microsoft.com/ja-jp/library/ie/hh869299(v=vs.85).aspx

パッチ当てて解決。

環境:
Windows Server 2008 R2
IIS7.5
.NET framework 2.0
.NET framework 3.5
.NET framework 4.0

なお、Windows Server 2008 R2 に SP1 を当ててしまうと、上記パッチが
当てられなくなります。

.NET 4.0を使用してるASP.NETページはSP1当てる前からか、SP1当ててからか、
どの段階で対応されてるか調査してませんが、IE10は検出できてました。

しかし、.NET 2.0ページだとSP1当ててからIE10対応パッチを当てようとしても
当てられず、取り残されます。

解決策としては、MSの言うとおり
・適用済みパッチ(SP1)を削除して、上記パッチを当てて、SP1を当てなおす。
とするか、
・.NET 2.0 の ie.browser ファイルをIE10対応版に置換して、
 aspnet_regbrowsers -i コマンドを発行する。
とするか等です。

Service Packとなると、さすがに消すのは怖いので今回は後者を実施しました。
手順:
・SP1未適用マシン(試験機など)にIE10対応パッチ(.NET 2.0用)を適用。
・以下のファイルをノートパッドなどで開き、IE10対応版になってるか確認。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers\ie.browser

 ※ファイル中、「IE10plus」などの記述があればOK。

・以下のフォルダごとコピーして何処かへ退避。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 (32bitも64bitも一緒でしたのでどちらでもよいです。違ってたらそれぞれ
  取得してください。v2.0.xxx の箇所は.NET 2.0 の実際のフォルダを指定
  してください。)
・IE10対応させたいマシンの「Browsers」フォルダを、前手順で取得した
 もので置き換える。(32bit, 64bit 両方とも。)
 32bit :    C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 64bit :    C:\windows\Microsoft.NET\Framework64\v2.0.50727\Config\Browsers

・コマンドプロンプトを開き、以下のコマンドを実行。
cd C:\windows\Microsoft.NET\Framework\v2.0.50727
aspnet_regbrowsers -i

cd C:\windows\Microsoft.NET\Framework64\v2.0.50727
aspnet_regbrowsers -i

以上。

0 件のコメント:

コメントを投稿