解决ASP.NET服务器控件在IE10下的不兼容问题

解决ASP.NET服务器控件在IE10下的不兼容问题,第1张

解决ASP.NET服务器控件在IE10下的不兼容问题

相信很多使用IE10的童鞋都已经发现了这个问题。以下是我在IE10标准模式下的问题。声明:IE10不止一个版本。

1.缺少服务器控件属性,并且aspx页中定义的TextBox:

<ASP:TextBoxID="txt"runat="server"Width="200"/>;

在IE10标准模式下浏览发现宽度不对,于是打开源代码发现了这个:

<inputname="txt"type="text"id="txt"/>;宽度属性消失了。

2.偶尔发现页面报错__doPostBack找不到

目前发现以上两点,第一反应是兼容性问题。查了一些资料,原来是IE10的bug,不禁对微软的产品产生了不满。新的浏览器甚至与它自己的服务器控件也有兼容性问题。

一般用户只需要设置自己的浏览器在兼容模式下运行,但是开发者如何解决这个问题呢?

将App_Browsers文件夹添加到项目VS中,添加ie.browser文件,在文件内容中发布以下内容:

<browsers>     <!-- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) -->     <browser id="IE6Plus" parentID="IE">         <identification>             <capability name="majorversion" match="^[6-9]|\d{2,}$" />         </identification>         <capabilities>             <capability name="ecmascriptversion"    value="3.0" />             <capability name="jscriptversion"       value="5.6" />             <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>     <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -->     <browser id="IE6to9" parentID="IE6Plus">         <identification>             <capability name="majorversion" match="^[6-9]$" />         </identification>     </browser>     <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -->     <browser id="IE7" parentID="IE6to9">         <identification>             <capability name="majorversion" match="^7$" />         </identification>         <capabilities>             <capability name="jscriptversion" value="5.7" />         </capabilities>     </browser>     <!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) -->     <browser id="IE8" parentID="IE6to9">         <identification>             <capability name="majorversion" match="^8$" />         </identification>         <capabilities>             <capability name="jscriptversion" value="6.0" />         </capabilities>     </browser>     <!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) -->     <browser id="IE9" parentID="IE6to9">         <identification>             <capability name="majorversion" match="^9$" />         </identification>         <capabilities>             <capability name="jscriptversion" value="6.0" />         </capabilities>     </browser>     <!-- Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) -->     <browser id="IE10Plus" parentID="IE6Plus">         <identification>             <capability name="majorversion" match="\d{2,}" />         </identification>         <capabilities>             <capability name="jscriptversion" value="6.0" />         </capabilities>     </browser>     <gateway id="IEbeta" parentID="IE">         <identification>             <capability name="letters" match="^([bB]|ab)" />         </identification>         <capture>         </capture>         <capabilities>             <capability name="beta"    value="true" />         </capabilities>     </gateway> </browsers>

这是一种基于站点的修复方法,参考微软官方数据:

。NET4浏览器更新NuGet包-http://nuget.org/list/packages/app_browsers更新

。NET2.0浏览器更新NuGet包-http://nuget.org/list/packages/app_browsersupdate.NET20

还有一个就是打补丁,可以解决服务器上所有站点的兼容性问题。

。净4-http://support.microsoft.com/kb/2600088

。NET2.0-http://support.microsoft.com/kb/2600100

另外,博主在项目中大量使用了devexpress服务器控件,惨不忍睹。虽然VS带来的控件经过上述方式修复后并没有出现问题,但是dev控件出现了大量错误,最终并没有修复,所以用户只能使用兼容模式。

我只希望微软在发布下一个版本的浏览器时能够修复这个问题。

补充,在web.config里加HTTP响应标头改变浏览器呈现模式

参考资料:

http://www.IIS.net/configreference/system.webserver/httpprotocol/customheaders

http://msdn.microsoft.com/zh-cn/library/bb763179.aspx

http://blogs.msdn.com/b/webtopics/archive/2008/09/05/configuring-IIS-to-work-around-网页-显示-问题-起因于internet-explorer-8-0.aspx

<configuration>        <system.webServer>           <httpProtocol>              <customHeaders>                 <clear />                 <add name="X-UA-Compatible" value="IE=EmulateIE7" />              </customHeaders>           </httpProtocol>        </system.webServer>     </configuration>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/784299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存