Kar*_*hik 12 javascript c# asp.net internet-explorer-11
在我们的ASP.Net 4.0项目中,我们注意到,在IE 11只(包括上Windows 7 SP1和Windows 8.1),一些JavaScript没有被输出ASP.Net.
对于例如in IE 10和under,我们看到:
<select name="ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList\',\'\')', 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\Browsers或C:\ 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不会完成相同的操作.