在我们的ASP.Net 4.0项目中,我们注意到仅在IE 11 ( Windows 7 SP1和Windows 8.1上)中,有一些JavaScript没有被ASP.Net输出。
例如,在IE 10和下面,我们看到:
<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">在IE 11期间
<select name="ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList" id="ctl00_ctl00_cpHeading_cpHeading_ucWebStoreHeader_lshSubjectHeader_ddlVersionList">我们使用以下方法设置此脚本:
Page.ClientScript.RegisterClientScriptBlock(GetType(), null, script, true);这可能是因为.Net 4.0没有更新的浏览器定义文件来识别具有非“MSIE”用户代理字符串的IE 11?
我采用了这种假设,并尝试了在托管web应用程序的机器上安装Win 7 SP1和Win Server 2008 R2的Scott Hanselman's suggestion,但我没有注意到对任何.browser文件的更新
因此,我最终创建了自己的.browser文件,将其放在上面的文件夹和AppBrowsers中,没有运气(ran 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>我是否在正确的轨道上认为缺少的JavaScript是因为IE 11没有被.Net 4.0识别?如果是,为什么我的.browser不生效?
大家的时间和帮助是非常感谢的。
发布于 2013-09-30 17:55:31
在web服务器上安装.Net 4.5解决了这个问题(无需使用web应用程序)。这就是我相信4.5成功的原因。
IE 11有一个不包含"MSIE“的用户代理(UA)字符串,与所有以前版本的IE不同。IE 11有UA字符串:
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like GeckoIE 10 (及以下)具有UA字符串,如:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)浏览器定义用于识别各种版本的IE ( c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers),下的ie.browser在UA字符串中专门查找"MSIE“,增加了基于IE版本匹配的JavaScript功能)。在IE 11中,在ie.browser中找不到匹配,而在generic.browser ()中找到匹配。在.Net 4.0中,generic.browser禁用JavaScript,而在4.5中启用它,解决了我们的问题。
我不知道为什么手动编辑任何.browser文件,然后运行aspnet_regbrowsers –i and iisreset就不能完成同样的任务。
发布于 2013-12-02 12:40:30
@Adhooo正确地指出,Windows2003Server无法访问.Net 4.5,因此,如果您运行Windows2003Server来承载您的网站,那么更改为2008Server不是一夜之间的选择。
老实说,对我们来说,在2008年服务器上升级到.Net 4.5并不是一夜之间的选择,事实上也不是我们可以在接下来的几个月里做的事情,因为在我们的生产服务器上使用4.5之前需要进行各种测试。
但是我们仍然需要为我们网站的访问者解决这个问题。
下面是我们需要做的事情,我们需要解决这个问题,并在我们能够最终解决问题之前,按照微软的建议,争取一些时间来解决这个问题:
那时,我们的网站可以在IE11中使用,并且在非常需要的QA测试之后,我们就可以让访问者在生产环境中使用该网站。
但是请注意,如果您在运行该进程并需要将浏览器文件重新应用到服务器上,那么在重新应用这些文件之前,您必须使用“aspnet_regbrowsers.exe-u”卸载标志来取消文件注册。而且,在我们的例子中,我们还需要重新应用MS补丁,因为在我们完成之前,没有任何东西再次正常工作。
是的,一切都有点混乱--但这应该被看作是一个填充过程。
希望这能有所帮助。
发布于 2013-11-21 16:35:48
.NET框架4.5.1更新添加新的浏览器定义文件:http://www.microsoft.com/en-us/download/details.aspx?id=40773
https://stackoverflow.com/questions/19096677
复制相似问题