IE 11+ Windows 8.1中的doPostback失败

Chr*_*_vr 16 javascript internet-explorer windows-8.1

我在Windows 8.1预览中的IE 11中得到空白页.检查页面后,我认为下面的代码可能是罪魁祸首,因为在这些行之后没有进一步显示调试器窗口,所以代码在这一行之后就破了.

IE 11

<!-- <form name="aspnetForm" method="post" action="Register" id="aspnetForm">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkwNDQ3O
Run Code Online (Sandbox Code Playgroud)

我在Windows 8.1预览版的Chrome版本29.0.1547.57 m中尝试了相同的页面它在那里正常工作,我得到了以下代码.


<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
}
}
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

- >

小智 21

我们在C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers中创建了一个新的"ie11.browser"文件,现在ASP.NET正常工作.创建文件后,我们运行"aspnet_regbrowsers -i"并重新启动IIS.我们只是复制了IE6-9的功能.我们不知道这是否准确,但ASP.NET现在正在使用在Windows 8.1上运行的Explorer 11我们的ie11.browser文件如下所示:

<browsers>
  <browser id="IE11" parentID="Mozilla">
    <identification>
        <userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
        <userAgent nonMatch="IEMobile" />
    </identification>

    <capture>
        <userAgent match="Trident/(?'layoutVersion'\d+)" />
    </capture>

    <capabilities>
        <capability name="browser"              value="IE" />
        <capability name="layoutEngine"         value="Trident" />
        <capability name="layoutEngineVersion"  value="${layoutVersion}" />
        <capability name="extra"                value="${extra}" />
        <capability name="isColor"              value="true" />
        <capability name="letters"              value="${letters}" />
        <capability name="majorversion"         value="${major}" />
        <capability name="minorversion"         value="${minor}" />
        <capability name="screenBitDepth"       value="8" />
        <capability name="type"                 value="IE${major}" />
        <capability name="version"              value="${version}" />
    </capabilities>
</browser>

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
    <identification>
        <capability name="majorversion" match="11" />
    </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>
</browsers>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,IE11的某些安装包含用户代理中不匹配的其他文本(例如EIE10; ENUSWOW).我们使用此解决方案,但必须修改它以考虑这些用户.我建议使用这个正则表达式来解释这种可能性:**<userAgent match ="Trident\/7.0;.*rv :(?'version'(?'major'\ d +)(\.(?'minor'\ d + )?)(?'字母'\ w*))(?'额外'[^]]*)"/>** (2认同)

小智 10

我遇到过类似的问题,想分享我的发现以及我如何解决它.直接问题:.NET framework 4.0无法正确识别Internet Explorer 11浏览器.这可以通过调用以下方式在一个简单的网站和一个显示请求中的浏览器信息的页面上进行验证:

Request.Browser.Browser

Request.Browser.Version

没有任何补丁的结果是: Mozilla 0.0 一旦应用下面文章中提到的补丁,浏览器细节将变为: IE 11.0 但是这种方法在没有自定义.browser文件的网站上正常工作.我发现,如果您的站点中的系统app_browsers文件夹中只有一个空文件,那么浏览器和版本将再次出现错误,即Mozilla 0.0(尽管已经安装了.NET 4.0的补丁).通过包含Sistemas-infoe上一篇文章中提供的代码,我设法解决了这个不必要的行为问题.进入.browser文件并将其放入网站的app_browsers文件夹中.我想澄清一下,问题只发生在.NET 4.0上,而在.NET 4.5中,浏览器及其版本被正确检测到.

我希望这有帮助.

最诚挚的问候,Mihail


Adr*_*agg 9

您可能会因为IIS上的浏览器检测问题而绊倒.Scott Hanselman过去曾用IE10写过这个问题,而你所遇到的问题似乎反映了他的描述.

当时可用的修补程序http://support.microsoft.com/kb/2600088声明:

默认情况下,ASP.NET使用嗅探技术为用户代理字符串检测浏览器.浏览器定义文件涵盖一定范围的浏览器版本.但是,随着版本号的增加,ASP.NET可能无法使用用户代理字符串识别新版本的浏览器.在这种情况下,ASP.NET可能会将这些版本作为未知浏览器处理.例如,ASP.NET无法识别具有以下用户代理字符串的Windows Internet Explorer 10:

    Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
Run Code Online (Sandbox Code Playgroud)

但是,由于新的用户代理格式,此修补程序似乎不适用于IE11.有一个名为App_Browsers的NuGet包可能包含修复程序,但在此之前,您必须编写自己的规则.


MSDN浏览器定义文件架构提供了有关如何编写浏览器检测文件的详细信息; 您将在C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers中找到现有文件.

根据IE11 Preview中的MSDN Compatibilty Changes,预览中IE11的用户代理是:

    Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Run Code Online (Sandbox Code Playgroud)

标准的IE正则表达式无法识别(因此您遇到的问题),但以下情况应该起作用:

    Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)
Run Code Online (Sandbox Code Playgroud)

我没有在实时环境中测试它,但这确实正确地解析了主要版本和次要版本,这是解决原始问题的关键 - 尝试将其添加为文件中的另一个匹配项ie.browser.


请注意,最近在MSDN上提出了类似的问题 - 可能值得关注并做出贡献.


小智 9

Microsoft修补程序"2600088"肯定不起作用,因此您必须使用.browser文件路径.

使用最新版本的IE11,您需要对上面的Sistemas-infoe发布的ie.browser文件RegEx进行小修改.确保在分号和空格之间的UA字符串中允许更多字符.如果你的RegEx技能很糟糕(很像我的),那就是一个明星时期.

旧:

<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
Run Code Online (Sandbox Code Playgroud)

新:

<userAgent match="Trident\/7.0;.*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令测试ASP.Net是否正在识别修订版和.browser文件:

Response.Write (Request.Browser.MajorVersion)
Run Code Online (Sandbox Code Playgroud)

如果返回11,则应该消除JS错误.瞧!

更新:

2013年10月发布了第二个MS补丁.我现在可以删除.browser文件并只使用补丁.到目前为止运作良好.- 请参阅http://support.microsoft.com/kb/2836939