bxdxmx3

きじれてじろあ なきがせすで あぷせとねでぶ

IE10でasp.netアプリケーションがうまく動かないのはなぜ?

ASP.NETの特定の環境において、IE10でうまく動作しない場合がある。
ボタン押下時に、
「'__doPostBack' is undefined」とjavascriptエラーになり、処理が行われない。

結論から言うと、
ユーザーエージェントのバージョン誤解釈によるバグ。
ブラウザ判別を誤り、最低限の機能をもったブラウザと判別してしまう

こちらに全て書いてある。
Bug and Fix: ASP.NET fails to detect IE10 causing _doPostBack is undefined JavaScript error or maintain FF5 scrollbar position - Scott Hanselman

修正前の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>