以前、質問に投稿して回答しました。WebResource.axd が Internet Explorer 11 で動作しない
しかし、ホットフィックスで問題が修正されたと思いました (CrossPostback、AJAX コントロール、および ASP.NET によって生成されたポストバックが動作しない) が、QA にインストールした後、動作せず、.NET であることがわかりました。物事を機能させた4.5。
私は、.NET 4 と .NET 4.5 の間で .NET Frameworks フォルダーを比較しています。.NET 4.5 で IE 11 の問題を実際に解決できることを尋ねる必要がありました。
IE 11 での主な変更点は、ユーザー エージェント文字列です。ASP.NET 4.0 と IE 11 の違いを解決できた .NET 4.5 の特定の修正は何でしたか。
将来、セキュリティ/ホット フィックスが .NET 4.0 にインストールされた場合、これらのファイルが上書きされる可能性があるため、違いを手動でマージしても実際には役に立たない可能性があります。
別のヘッドサップ、問題は Windows 7,8,8.1 の IE 11 に関するものです。
更新: .NET 4.5 のブラウザー定義のみを .NET 4.0 に登録しようとしましたが、まだ問題が残っているため、定義とは別に、IE 11 で動作させるライブラリがいくつかあります。
2 に答える
DropDownList の自動ポストバックが新しいバージョンの IE で機能しなくなるという同様の問題がありました。私たちは最初に IE10 でこの問題に気付き、多くの人が認識しているブラウザー定義のバグを追跡しました。これについては、ここなどで詳しく説明しています。
この特定のアプリケーションと、そのさまざまな環境が実行されている一連のボックスの場合、4.5 へのアップグレードは当面の選択肢ではありませんでした。さらに、上記の投稿で詳述されているマシン全体の修正プログラムをインストールしようとすると、エラーが発生しました。ただし、サイト全体の修正により、うまくいきました。
1、2 週間後、たまたま誰かが IE11 Preview でサイトにアクセスしたところ、問題が再び発生しました。さらに調査を行った結果、サイト全体の修正 (実際には IE10 の問題を修正した) のブラウザー定義 "IE10Plus" が IE11 では機能しないことがわかりました。IE10 を識別するために、majorversion regex 一致が追加されました - "\d{2,}" - これは 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.browser に次を追加 (または作成) します。
<!-- 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" を探します。「Plus」の部分は正確ではないため、id="IE10" に変更することをお勧めします。
私が言ったように、もしあなたが 4.5 に行くことができれば、あなたの問題は解決します - 素晴らしいです。できない場合、またはできない場合は、できるようになるまで (または他の修正が行われるまで)、これで問題が解決しない可能性があります。
こんにちは、次のスクリプトを試してみてください。
<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>