首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.Net 4.0,JavaScript未在IE11中输出

ASP.Net 4.0,JavaScript未在IE11中输出
EN

Stack Overflow用户
提问于 2013-09-30 14:23:17
回答 3查看 8.8K关注 0票数 12

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

例如,在IE 10和下面,我们看到:

代码语言:javascript
复制
<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">

IE 11期间

代码语言:javascript
复制
<select name="ctl00$ctl00$cpHeading$cpHeading$ucWebStoreHeader$lshSubjectHeader$ddlVersionList" id="ctl00_ctl00_cpHeading_cpHeading_ucWebStoreHeader_lshSubjectHeader_ddlVersionList">

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

代码语言:javascript
复制
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文件的内容:

代码语言:javascript
复制
<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不生效?

大家的时间和帮助是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2013-09-30 17:55:31

在web服务器上安装.Net 4.5解决了这个问题(无需使用web应用程序)。这就是我相信4.5成功的原因。

IE 11有一个不包含"MSIE“的用户代理(UA)字符串,与所有以前版本的IE不同。IE 11有UA字符串:

代码语言:javascript
复制
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

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

代码语言:javascript
复制
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就不能完成同样的任务。

票数 12
EN

Stack Overflow用户

发布于 2013-12-02 12:40:30

@Adhooo正确地指出,Windows2003Server无法访问.Net 4.5,因此,如果您运行Windows2003Server来承载您的网站,那么更改为2008Server不是一夜之间的选择。

老实说,对我们来说,在2008年服务器上升级到.Net 4.5并不是一夜之间的选择,事实上也不是我们可以在接下来的几个月里做的事情,因为在我们的生产服务器上使用4.5之前需要进行各种测试。

但是我们仍然需要为我们网站的访问者解决这个问题。

下面是我们需要做的事情,我们需要解决这个问题,并在我们能够最终解决问题之前,按照微软的建议,争取一些时间来解决这个问题:

  1. 浏览器文件-我们也修改了浏览器文件,以指导.Net框架如何响应IE11的使用。
  2. Microsoft然后我们安装了修补程序(http://support.microsoft.com/kb/2836939/en-us)并重新启动。
  3. 从命令行注册新的浏览器修改,运行以下行: c:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regbrowsers.exe -i
  4. 重置IIS --需要这样做,以确保IIS随后获取对文件的更改: 虹膜复位

那时,我们的网站可以在IE11中使用,并且在非常需要的QA测试之后,我们就可以让访问者在生产环境中使用该网站。

但是请注意,如果您在运行该进程并需要将浏览器文件重新应用到服务器上,那么在重新应用这些文件之前,您必须使用“aspnet_regbrowsers.exe-u”卸载标志来取消文件注册。而且,在我们的例子中,我们还需要重新应用MS补丁,因为在我们完成之前,没有任何东西再次正常工作。

是的,一切都有点混乱--但这应该被看作是一个填充过程。

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2013-11-21 16:35:48

.NET框架4.5.1更新添加新的浏览器定义文件:http://www.microsoft.com/en-us/download/details.aspx?id=40773

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19096677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档