相信很多使用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文件,文件內容帖下面的內容:
<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>
這是一種基於站點的修復方式,參考微軟官方資料:
.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控件卻一大堆錯誤,最終還是沒有修復,只能讓用戶使用兼容性模式。
只希望微軟發佈下一版本瀏覽器時能修復這個問題
補充,在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-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>