ASP.Net 4.0,IE 11中未输出JavaScript

Kar*_*hik 12 javascript c# asp.net internet-explorer-11

在我们的ASP.Net 4.0项目中,我们注意到,在IE 11只(包括上Windows 7 SP1Windows 8.1),一些JavaScript没有被输出ASP.Net.

对于例如in IE 10和under,我们看到:

<select name="ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_ctl00_cpHeading_cpHeading_ucWebStoreHeader_lshSubjectHeader_ddlVersionList">
Run Code Online (Sandbox Code Playgroud)

IE 11:

<select name="ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList" id="ctl00_ctl00_cpHeading_cpHeading_ucWebStoreHeader_lshSubjectHeader_ddlVersionList">
Run Code Online (Sandbox Code Playgroud)

我们使用以下方法设置此脚本:

Page.ClientScript.RegisterClientScriptBlock(GetType(), null, script, true);
Run Code Online (Sandbox Code Playgroud)

这可能是因为.Net 4.0没有更新的浏览器定义文件IE 11用其非"MSIE"用户代理字符串识别吗?

我采用了这个假设,并尝试了Scott Hanselman建议在托管Web应用程序的机器上的Win 7 SP1和Win Server 2008 R2上安装KB2836939,但我没有注意到C中任何.browser文件的更新:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\BrowsersC:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers.

所以,我最终创建了自己的.browser文件,将其放在上面的文件夹中,而AppBrowsers则没有运气(运行aspnet_regbrowsers –i and iisreset).这是我放在文件夹中的IE11.browser文件的内容:

<browsers>
<browser id="IE11" parentID="Mozilla">
<identification>
    <userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />
    <userAgent nonMatch="IEMobile" />
    <userAgent nonMatch="MSIE" />
</identification>    
<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="majorversion"         value="${major}" />
    <capability name="minorversion"         value="${minor}" />
    <capability name="screenBitDepth"       value="8" />
    <capability name="type"                 value="IE${major}" />
    <capability name="version"              value="${version}" />
    <capability name="ecmascriptversion"    value="3.0" />
    <capability name="jscriptversion"                       value="6.0" />
    <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)

我是否正确地认为缺少的JavaScript是因为IE 11无法被.Net 4.0识别?如果是的话,为什么我的.browser没有生效?

每个人的时间和帮助都非常感谢.

Kar*_*hik 12

在Web服务器上安装.Net 4.5解决了该问题(没有Web应用程序需要使用4.5).这就是为什么我相信4.5的诀窍.

与所有先前版本的IE不同,IE 11具有不包含"MSIE"的用户代理(UA)字符串.IE 11有UA字符串:

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

IE 10(及以下)有UA字符串,如:

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

用于识别IE的各种版本的浏览器定义(即c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers下的浏览器),专门针对UA字符串中的"MSIE",添加基于JavaScript的功能在IE版本上匹配.对于IE 11,在ie.browser中找不到匹配,而是在generic.browser()中找到匹配.在.Net 4.0中,generic.browser禁用JavaScript,而在4.5中,它启用,解决了我们的问题.

我不知道为什么手动编辑任何.browser文件,然后运行aspnet_regbrowsers –i and iisreset不会完成相同的操作.

  • 在Windows Server 2003上运行时,无法安装.NET 4.5.通过仅更新App_Browser文件夹中的.browser文件来解决这个问题是不可能的(就像使用Scott Hanselman的NuGet包一样对IE10进行了解决? (3认同)