IE10でasp.netアプリケーションがうまく動かないのはなぜ?
ASP.NETの特定の環境において、IE10でうまく動作しない場合がある。
ボタン押下時に、
「'__doPostBack' is undefined」とjavascriptエラーになり、処理が行われない。
結論から言うと、
ユーザーエージェントのバージョン誤解釈によるバグ。
ブラウザ判別を誤り、最低限の機能をもったブラウザと判別してしまう
修正前のbrowserファイルを見ると以下のようになっている。
IE10のユーザーエージェントは、バージョンが10となっており、
正規表現^[5-9]の定義に当てはまらない。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers\ie.browser
<browser id="IE5to9" parentID="IE"> <identification> <capability name="majorversion" match="^[5-9]" /> </identification> <capture> </capture> <capabilities> <capability name="activexcontrols" value="true" /> <capability name="backgroundsounds" value="true" /> <capability name="cookies" value="true" /> <capability name="css1" value="true" /> <capability name="css2" value="true" /> <capability name="ecmascriptversion" value="1.2" /> <capability name="frames" value="true" /> <capability name="javaapplets" value="true" /> <capability name="javascript" value="true" /> <capability name="jscriptversion" value="5.0" /> <capability name="msdomversion" value="${majorversion}${minorversion}" /> <capability name="supportsCallback" value="true" /> <capability name="supportsFileUpload" value="true" /> <capability name="supportsMultilineTextBoxDisplay" value="true" /> <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> <capability name="supportsVCard" value="true" /> <capability name="supportsXmlHttp" value="true" /> <capability name="tables" value="true" /> <capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /> <capability name="vbscript" value="true" /> <capability name="w3cdomversion" value="1.0" /> <capability name="xml" value="true" /> </capabilities> </browser>
以下のパッチを当てるとbrowser定義ファイルが更新される。
http://support.microsoft.com/kb/2600088/
最初の正規表現が修正されていることがわかる。
<browser id="IE6to9" parentID="IE"> <identification> <capability name="majorversion" match="[6-9]|[1-9]\d+" /> </identification> <capabilities> <capability name="ecmascriptversion" value="3.0" /> <capability name="jscriptversion" value="5.6" /> <capability name="javascript" value="true" /> <capability name="javascriptversion" value="1.5" /> <capability name="msdomversion" value="${majorversion}.${minorversion}" /> <capability name="w3cdomversion" value="1.0" /> <capability name="ExchangeOmaSupported" value="true" /> <capability name="activexcontrols" value="true" /> <capability name="backgroundsounds" value="true" /> <capability name="cookies" value="true" /> <capability name="frames" value="true" /> <capability name="javaapplets" value="true" /> <capability name="supportsCallback" value="true" /> <capability name="supportsFileUpload" value="true" /> <capability name="supportsMultilineTextBoxDisplay" value="true" /> <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> <capability name="supportsVCard" value="true" /> <capability name="supportsXmlHttp" value="true" /> <capability name="tables" value="true" /> <capability name="supportsAccessKeyAttribute" value="true" /> <capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /> <capability name="vbscript" value="true" /> </capabilities> </browser>