2013-09-30 48 views
12

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

例如,在IE 10及以下,我们看到:

​​

虽然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没有更新浏览器定义文件以识别IE 11及其非MSIE用户代理字符串?

我按照这个假设去做了,并且试图在承载Web应用程序的机器上的Win 7 SP1和Win Server 2008 R2上安装KB2836939的Scott Hanselman's suggestion,但是我没有注意到更新了任何.browser文件C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \浏览器C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \浏览器

所以,我最终创建了自己的.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> 

我在正确的轨道以为丢失的JavaScript是因为IE 11不被.NET 4.0的认可呢?如果是,为什么我的.browser不起作用?

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

+0

为什么IE11有Mozilla的parentID? '' – Blaise

+0

Mozilla是定义基本功能的“基础”浏览器定义。 IE11然后增加了它的功能。我遵循了与.Net 4.0一起提供的ie.browser中使用的约定。 – Karthik

+0

['WebForm \ _DoPostBackWithOptions'在IE11预览中未定义](http://stackoverflow.com/questions/18244223/webform-dopostbackwithoptions-is-undefined-in-ie11-preview) – EricLaw

回答

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 

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

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0) 

运往承认IE(在c ie.browser的各种版本的浏览器定义:\ Windows下\ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ Browsers),在UA字符串中专门查找“MSIE”,在基于IE版本匹配的基础上添加JavaScript功能。使用IE 11时,在ie.browser中找不到匹配项,而在generic.browser()中找到匹配项。在.Net 4.0中,generic.browser禁用JavaScript,而在4.5中,它已启用,解决了我们的问题。

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

+3

当在Windows Server 2003上运行时无法安装.NET 4.5。仅仅通过更新App_Browser文件夹中的.browser文件来解决这个问题是不可能的(正如Scott Hanselman的NuGet包所做的IE10一样? – Adhooo

3

@Adhooo正确地说,.Net 4.5不可用于Windows 2003服务器,因此如果您运行Windows 2003 Server来托管您的网站,则更改为2008 Server不是一夜之间的选择。老实说,对于我们来说,在我们的2008 Server上升级到.Net 4.5并不是一夜之间的选择,事实上也不是我们可以在接下来的几个月内做的事情,因为之前需要进行各种测试能够在我们的生产服务器上使用4.5。

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

下面就是我们发现我们需要做些什么来解决这个问题,买我们一些时间,才能够最终通过以下获得4.5在那里的微软的建议解决这个问题:

  1. 浏览器文件 - 我们也,修改浏览器文件以指示.Net框架如何响应IE11的使用。
  2. 微软补丁 - 我们随后安装了补丁(http://support.microsoft.com/kb/2836939/en-us)并重新启动。
  3. 注册新的浏览器修改 - 从一个命令行,运行以下行:

    C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ aspnet_regbrowsers.exe -i

  4. 复位IIS - 这需要做,以确保IIS然后拿起更改文件:

    IISRESET

那时我们在一个位置,从而Ø我们的网站在IE11中可用,并且在进行必要的QA测试之后,我们能够让访问者在生产环境中使用该网站。

但是请注意,如果您在浏览过程中需要重新将浏览器文件应用于服务器,则必须使用'aspnet_regbrowsers.exe -u'卸载标志来取消注册文件然后再重新申请。而且,在我们的情况下,我们还需要重新应用MS补丁,因为在我们做之前,没有任何工作可以正常进行。

是的,所有有点混乱 - 但这应该被视为一个填写过程。

希望这会有所帮助。