Analytics

2015年1月13日 星期二

[ASP.NET]解決 AngularJS 於IE 11不正常做動 (AngularJS solve abnormal actuation in IE11)


問題
使用ASP.NET配合AngularJS於IE8環境開發的系統,在IE升到11後,發現AngularJS完全沒有作用!
頁面上有使用X-UA-Compatible設定相容性 <meta http-equiv="X-UA-Compatible" content=''IE=8" />




解決方法
IE 11相容性變更中提到
--------------------------------------------------------------------------------------------------------------------
邊緣模式從 Internet Explorer 8 開始引入,已經用於每個後續版本。 請注意,邊緣模式支援的功能僅限於轉譯內容之特定版本瀏覽器支援的功能。
從 IE11 開始,文件模式已過時且不再使用,除非只是暫時性使用。 請務必更新仰賴傳統功能和文件模式的網站,以反映現代標準。
如果您必須使用特定文件模式以便讓網站正常運作,同時又要將它重新建構為支援現代標準和功能,請務必注意您使用的是轉換功能,未來的版本可能不會提供這類功能。
--------------------------------------------------------------------------------------------------------------------

但是系統必須在IE8 與IE11都可執行(使用者環境有IE8 跟IE11),所以不能針對IE11做調整 查了一下網路,有的說是jQuery的bug,有的說是AngularJS的bug,也有的說把meta改為 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />,但是試了都不行!
索性猜測應該是IE11在解析文件模試時,不支援IE 8,因此將meta改為IE 9 結果將將~搞定! =
<meta http-equiv="X-UA-Compatible" content="IE=9" />
但必需系統也能跑在IE 8,因此於ASP.NET Server Side判斷使用者IE版本,若IE版本大於8,則為IE9,反之則為IE8
aspx:
<meta http-equiv="X-UA-Compatible" content=<%=IE_VER%> />
.cs:
protected string IE_VER = string.Empty;

protected void Page_Load(object sender, EventArgs e)
{
HttpBrowserCapabilities bc = Request.Browser;
string ie_ver = bc.Version;
if (Convert.ToDouble(ie_ver) > 8)
 IE_VER= "IE=9";
else
 IE_VER= "IE=8";
}

沒有留言:

熱門文章