2013-08-02 84 views
5

我之前已發佈並回答了問題。 WebResource.axd not working with Internet Explorer 11

但我認爲修補程序修復了問題(CrossPostback,AJAX控件和ASP.NET生成的回發不起作用),但是在QA中安裝後,它無法正常工作,我們意識到它是使.NET工作的.NET 4.5。
我正在比較.NET 4和.NET 4.5之間的.NET框架文件夾。我需要問什麼可以在.NET 4.5中真正解決IE 11問題。
IE 11的主要變化是用戶代理字符串。 .NET 4.5中的哪些特定修補程序可以解決ASP.NET 4.0和IE 11之間的差異。
手動合併這些差異可能並不真正有幫助,因爲將來如果.NET 4.0中安裝了安全/修補程序,這些文件可能會得到覆蓋。
另一個headup,問題是在Windows 7,8,8.1, IE 11的任何幫助或建議。
UPDATE:我們嘗試僅登記的.NET 4.5的瀏覽器定義爲.NET 4.0,但仍是問題,從定義仍然如此除了有一些圖書館,使事情在IE 11CrossPostback,AJAX控件和ASP.NET生成的回發適用於.NET 4.5,而不適用於IE 11中的.NET 4.0

+0

這不是關於「庫」,而是關於UA字符串及其解釋。你安裝了這個嗎? http://support.microsoft.com/kb/2836947 – EricLaw

+0

我已經安裝了所有修補程序 「遇到腳本錯誤」,「'__doPostBack'未定義爲.NET 4.0 –

+0

我試圖訪問IE 11中的網頁+ Windows 8.1。我得到空白page.seems Java腳本不支持,由於這個問題。任何建議 –

回答

14

工作我們有一個類似的問題,DropDownList的自動回發停止與較新版本的IE一起工作。我們首先注意到了IE10,並將其跟蹤到許多人都知道的瀏覽器定義錯誤,其中詳細描述了here以及其他地方。

對於這個特定的應用程序和其不同環境運行/運行的一組盒子,升級到4.5不是一個近期選項。更重要的是,當我們試圖安裝它時,在上面的帖子中詳細說明了機器範圍的修復。然而,整個網站的解決方案確實有效。

一兩個星期後,有人碰巧用IE11預覽版擊中了網站,問題又出現了。我們做了一些更多的研究,發現整個網站的修補程序中的瀏覽器定義「IE10Plus」 - 實際上修復了IE10問題 - 對IE11無效。爲了識別IE10,添加了一個主版本的正則表達式匹配 - 「\ d {2,}」 - 匹配兩個數字(與沿着「^ 9 $」的行匹配的前一個匹配 - 完全匹配「9」)和IE10現在工作。問題在於IE10Plus定義(以及它之前的每個IE定義)最終來自「IE」定義,並且該定義還要求UA字符串中包含「MSIE」(除其他外),並且從IE11開始,「 MSIE「不再是UA字符串的一部分。

「IE10Plus」應該真的叫做「IE10」。

鑑於我們不能在短期內升級到4.5,我們必須找到另一種解決方案。我們碰到的那個是創建我們自己的IE11瀏覽器定義。我們無法定義超出我們在IE10中看到的任何功能,但這非常接近,至少它可以識別瀏覽器(而不會像功能一樣降級功能)。

人們會告訴你不要這樣做,但對於一些人(比如我們)來說,它確實提供了一個臨時修復,直到最終的解決方案出現。

我不知道4.5應該用什麼方式解決這個問題。我查看了瀏覽器定義文件,我沒有看到讓他們識別IE11的方式(在其UA字符串中沒有「MSIE」),但也許有一些額外的修復被埋在DLL的某處。

無論如何,這裏是我們創建的定義,對我們來說,它立即解決了問題。

在您的項目中,添加到(或創建爲)App_Browsers/ie。瀏覽器,下面的:

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko --> 
<browser id="IE11Preview" parentID="Mozilla"> 
    <identification> 
     <userAgent match="Trident/(?'layoutVersion'\d+).*rv:(?'revision'(?'major'\d+)(\.(?'minor'\d+)?))" /> 
     <userAgent nonMatch="MSIE" /> 
    </identification> 

    <capabilities> 
     <capability name="browser"    value="IE" /> 
     <capability name="layoutEngine"   value="Trident" /> 
     <capability name="layoutEngineVersion" value="${layoutVersion}" /> 
     <capability name="isColor"    value="true" /> 
     <capability name="screenBitDepth"  value="8" /> 
     <capability name="ecmascriptversion" value="3.0" /> 
     <capability name="jscriptversion"  value="6.0" /> 
     <capability name="javascript"   value="true" /> 
     <capability name="javascriptversion" value="1.5" /> 
     <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" /> 
     <capability name="revmajor"    value="${major}" /> 
     <capability name="revminor"    value="${minor}" /> 
    </capabilities> 
</browser> 

如果要添加到現有的文件中,查找ID =「IE10Plus」 - 你可能想改變這種狀況,以ID =「IE10」爲「正」的部分是沒有更準確。

正如我所說,如果你可以去4.5,它解決了你的問題 - 太棒了。如果你不能,或者它不能,這可能會阻止你,直到你可以(或者直到其他修正出現)。

+1

感謝邁克爾,還沒有嘗試過,一定會做,讓你知道。 –

+1

FWIW,我剛剛提出了另一個運行4.5的服務器,它與IE11完美兼容。瀏覽器的定義是有道理的,而且 - 「股票」 - 我認爲比這更好。 – Michael

+1

我正在Windows Server 2003上運行一個站點,並且無法升級到.NET 4.5而不移動到新的服務器。當IE10發佈時,我通過安裝Scott Hanselman的NuGet包,將ie.browser和firefox.browser添加到App_Browser文件夾來解決問題。我試圖將IE11Preview定義添加到ie.browser文件並重新啓動該網站,但它仍然無法使用IE 11 Preview(Windows 8.1)。有任何想法嗎? – Adhooo

1

嗨試試下面的腳本它可能會幫助你。

<script type="text/javascript"> 
Sys.WebForms.PageRequestManager.getInstance()._origOnFormActiveElement = Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive; 
Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive = function (element, offsetX, offsetY) { 
if (element.tagName.toUpperCase() === 'INPUT' && element.type === 'image') { 
offsetX = Math.floor(offsetX); 
offsetY = Math.floor(offsetY); 
} 
this._origOnFormActiveElement(element, offsetX, offsetY); 
}; 
</script> 
相關問題