問題
使用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"; }
沒有留言:
張貼留言