Infragistics 的 UltraWebGrid 在 IE11 上無法正常顯示問題
最近許多機器更新後Browser都升級到了 IE11,而我們公司原本使用的 UltraWebGrid.v11.1 在 IE11 下顯示卻不正常(使用相容性檢視是OK的)。
在IIS上設定相容性,也不會Apply到 IE11 上面(IE8~IE10是OK的)。
而在IE11上測試的過程中會有 'igtbl_getGridById' is undefined 的錯誤(是因為某些JS沒有下載下來)。
透過 HttpWtach 來錄瀏覽網頁的過程,可以發現使用相容性會多下載 ig_WebGrid.js、ig_WebGrid_cb.js、ig_WebGrid_an.js和ig_WebGrid_kb.js等 JS 檔案,如下,
猜想有可能是在偵測Browser的問題,但 Infragistics在 v11.2 之後就沒有 UltraWebGrid 了,所以找不到太多的資訊。
後來透過 .NET Reflector 看到它有個 Browser 的屬性,預設是 Auto ,於是把它改成 UpLevel ,就可以正常顯示了哦!
設定要顯示序號,在IE 11下沒有正常的顯示出來。
<igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server"
DisplayLayout-AllowRowNumberingDefault="Continuous" >
</igtbl:UltraWebGrid>
設定 Browser 屬性為 UpLevel 就可以正常顯示。
<igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server"
DisplayLayout-AllowRowNumberingDefault="Continuous"
Browser="UpLevel" >
</igtbl:UltraWebGrid>
2014/01/10 補充使用 IE11OV.browser 設定,只適用ASP.NET 3.5
原本上面的作法是在Grid上加入設定 Browser 的設定為 UpLevel ,但需要每個Grid設定,太麻煩了。
如果是Asp.NET 3.5的話,就可以新增一個App_Browsers目錄,然後新增一個叫 IE11OV.browser 檔案,內容如下,
<browsers>
<browser id="IE11OV" parentID="MozillaRV">
<identification>
<userAgent match="Trident" />
<capability name="majorversion" match="11" />
</identification>
<capabilities>
<capability name="browser" value="IE" />
</capabilities>
</browser>
</browsers>
這樣執行,Grid上沒有設定 Browser 屬性也可以正常哦!
參考自「Infragistics.WebUI.UltraWebGrid.ClickEventHandler problem in Internet Explorer IE11」
因為ASP.NET 4.0針對Browser的設定跟.NET 2.0的不同,
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
VS
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers
所以如果您的專案是使用.NET 4.0的話,會有「The browser or gateway element with ID 'MozillaRV' cannot be found.
」的錯誤訊息,如下,
2014/0114 補充說明 ASP.NET 4.0的解決方式,就是將 parentID="MozillaRV" 改成 parentID="InternetExplorer" ,如下為ASP.NET 4.0版本的browser檔內容,
<browsers>
<browser id="IE11OV" parentID="InternetExplorer">
<identification>
<userAgent match="Trident" />
<capability name="majorversion" match="11" />
</identification>
<capabilities>
<capability name="browser" value="IE" />
</capabilities>
</browser>
</browsers>
所以如果要相容以前的話,可以先將v4.0.30319\Config\Browsers中的檔案先備份出來,然後將v2.0.50727\CONFIG\Browsers中的檔案Copy過去。
並執行 C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regbrowsers.exe -i ,然後網站重新啟動,應該就可以順利執行。
目前就研究到這邊,如果各位先進有其他的方式,也請讓我知道。
之後如果有新的發現,再跟大家分享。
2014/01/14 補充目前同事 Jenny 的做法如下(感謝 Jenny 的分享) ,
如果使用 App_Browsers 的方式,發現在Tree的點選及一些頁面會有JavaScript的Error,
所以目前解法是在 <igtbl:UltraWebGrid 加入 Browser="UpLevel" 及在IIS HTTP回應標頭加上 X-UA-Compatible 的值IE=EmulateIE7
參考資料
Infragistics.WebUI.UltraWebGrid.ClickEventHandler problem in Internet Explorer IE11
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^