相信很多使用IE10的童鞋们已经发现了这个问题,以下是本人在IE10标准模式下发生的问题,声明:IE10不只有一个版本
1.服务器控件属性丢失,在aspx页面定义的TextBox:
<asp:TextBox ID="txt" runat="server" Width="200" />
在IE10标准模式下浏览发现宽度不对,遂打开源代码发现成这样了:
<input name="txt" type="text" id="txt" /> width属性没了
2.偶尔发现页面报错__doPostBack找不到
目前就发现以上两点,第一反应就是兼容性问题,查了一些资料,果然是IE10的bug,不禁对微软的产品不满,新的浏览器尽然连自己的服务器控件都存在兼容性问题。
一般用户只需要设置浏览器在兼容模式下运行就可以解决了,但是开发人员怎么去解决这个问题呢?
VS项目里加App_Browsers文件夹,加ie.browser文件,文件内容帖下面的内容:
1 <browsers> 2 <!-- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) --> 3 <browser id="IE6Plus" parentID="IE"> 4 <identification> 5 <capability name="majorversion" match="^[6-9]|\d{2,}$" /> 6 </identification> 7 8 <capabilities> 9 <capability name="ecmascriptversion" value="3.0" /> 10 <capability name="jscriptversion" value="5.6" /> 11 <capability name="javascript" value="true" /> 12 <capability name="javascriptversion" value="1.5" /> 13 <capability name="msdomversion" value="${majorversion}.${minorversion}" /> 14 <capability name="w3cdomversion" value="1.0" /> 15 <capability name="ExchangeOmaSupported" value="true" /> 16 <capability name="activexcontrols" value="true" /> 17 <capability name="backgroundsounds" value="true" /> 18 <capability name="cookies" value="true" /> 19 <capability name="frames" value="true" /> 20 <capability name="javaapplets" value="true" /> 21 <capability name="supportsCallback" value="true" /> 22 <capability name="supportsFileUpload" value="true" /> 23 <capability name="supportsMultilineTextBoxDisplay" value="true" /> 24 <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> 25 <capability name="supportsVCard" value="true" /> 26 <capability name="supportsXmlHttp" value="true" /> 27 <capability name="tables" value="true" /> 28 <capability name="supportsAccessKeyAttribute" value="true" /> 29 <capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /> 30 <capability name="vbscript" value="true" /> 31 </capabilities> 32 </browser> 33 34 <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) --> 35 <browser id="IE6to9" parentID="IE6Plus"> 36 <identification> 37 <capability name="majorversion" match="^[6-9]$" /> 38 </identification> 39 </browser> 40 41 <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) --> 42 <browser id="IE7" parentID="IE6to9"> 43 <identification> 44 <capability name="majorversion" match="^7$" /> 45 </identification> 46 <capabilities> 47 <capability name="jscriptversion" value="5.7" /> 48 </capabilities> 49 </browser> 50 51 <!-- 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) --> 52 <browser id="IE8" parentID="IE6to9"> 53 <identification> 54 <capability name="majorversion" match="^8$" /> 55 </identification> 56 <capabilities> 57 <capability name="jscriptversion" value="6.0" /> 58 </capabilities> 59 </browser> 60 61 <!-- 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) --> 62 <browser id="IE9" parentID="IE6to9"> 63 <identification> 64 <capability name="majorversion" match="^9$" /> 65 </identification> 66 <capabilities> 67 <capability name="jscriptversion" value="6.0" /> 68 </capabilities> 69 </browser> 70 71 <!-- Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) --> 72 <browser id="IE10Plus" parentID="IE6Plus"> 73 <identification> 74 <capability name="majorversion" match="\d{2,}" /> 75 </identification> 76 <capabilities> 77 <capability name="jscriptversion" value="6.0" /> 78 </capabilities> 79 </browser> 80 81 <gateway id="IEbeta" parentID="IE"> 82 <identification> 83 <capability name="letters" match="^([bB]|ab)" /> 84 </identification> 85 86 <capture> 87 </capture> 88 89 <capabilities> 90 <capability name="beta" value="true" /> 91 </capabilities> 92 </gateway> 93 </browsers>
这是一种基于站点的修复方式,参考微软官方资料:
.NET 4 浏览器更新 NuGet 包 - http://nuget.org/List/Packages/App_BrowsersUpdate
.NET 2.0 浏览器更新 NuGet 包 - http://nuget.org/List/Packages/App_BrowsersUpdate.net20
还有一种是打补丁,能解决服务器上所有站点的兼容性问题
.NET 4 - http://support.microsoft.com/kb/2600088
.NET 2.0 - http://support.microsoft.com/kb/2600100
另外博主在项目里用了大量的devexpress服务器控件,苦不堪言,虽然按照以上方式进行修复,VS自带的控件倒是没出现问题,但是dev控件却一大堆错误,最终还是没有修复,只能让用户使用兼容性模式。
只希望微软发布下一版本浏览器时能修复这个问题
参考资料:
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-webpage-display-issues-caused-by-internet-explorer-8-0.aspx
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>