2

iframe を含む ASP.NET ページがあります。その iframe 内には、以下に示すように、DefaultFocus と DefaultButton が設定されたフォームがあります。

<form id="Form1" method="post" runat="server" defaultfocus="txtSearchPhrase" defaultbutton="btnSearch">

このページを IE11 で表示すると、iframe 内のすべてのコンテンツが画面の左側から約 100 ピクセルほどずれて表示されます。これは、IE10 を含む他のブラウザーでは発生しません。

フォームから DefaultButton と DefaultFocus を削除すると、問題はなくなります。その後、Javascript を使用してデフォルトのボタンとフォーカスを手動で接続できますが、iframe 内にレンダリングされる可能性のあるさまざまなページが多数あるため、それらのページをすべて変更する必要があるのは理想的ではありません。

何が原因なのか、またはそれに対処するためのより良い方法があるかどうか、誰かが知っていますか?

4

1 に答える 1

3

これを調べていて、興味深いことがわかりました。

まず、ASP .NET WebForms のフォームにDefaultFocusまたはを含めると、ASP .NET は次の 2 つのものを自動的に発行します。DefaultButton

  1. メソッドの定義WebForm_AutoFocus
  2. このメソッドの呼び出しは次のようになります。と設定WebForm_AutoFocus('defaultFocusElementID');の両方に対してこれを行いますが、設定に対してこれを行う必要がある理由はわかりません。DefaultFocusDefaultButtonDefaultButton

メソッドは要素のメソッドWebForm_AutoFocusを呼び出そうとしますがscrollIntoView、ブラウザーが「非 MS DOM」ブラウザーとして検出された場合のみです。奇妙なことに、少なくともこのメソッドに関する限り、IE11 は MS DOM ブラウザーとは見なされません。そのため、メソッドIE 以外scrollIntoViewのブラウザーで実行するように設計されています。

バグは IE11 でのメソッドの実装にあると主張できると思いますがscrollIntoView、ブラウザーが MS DOM ブラウザーであるかどうかを検出する MS JS ライブラリーのバグと見なすこともできます。どちらにしても、Microsoft のせいです。:)

これらはマイクロソフト固有のものであるため、哲学的な観点からandを使用しないことをお勧めします。また、コードをマイクロソフト固有のものから遠ざけることができる場合は、通常は使用する必要があります。特に「マイクロソフトのやり方」を使うと完全に壊れてしまいます。むしろ、次のようなことを試してください (jQuery を使用している場合)。DefaultFocusDefaultButton

<form data-defaultfocus="search">
  <asp:TextBox ID="search" />
</form>

<script type="text/javascript">

  // jQuery on document ready
  $(function() {
    var form = $('form'),
      defaultButtonID,
      defaultFocusID;

    if (form.data('defaultfocus')) {
      defaultFocusID = form.data('defaultfocus');

      $('#' + defaultFocusID).focus();
    }

    if (form.data('defaultbutton')) {
      defaultButtonID = form.data('defaultbutton');

      form.on('keypress', function(event) {
        if (event.keyCode === 13) {
          __doPostBack(defaultButtonID, '');
        }
      });
    }
  });

</script>

これはテストされたコードではありませんが、アイデアは得られます。次に、Microsoft のやり方ではなく、フォーム要素でdata-defaultbuttonanddata-defaultfocusを実行して使用することができます。実際に機能し、機能しない場合は、コードを制御できるため、修正できます。

これが役立つことを願っています。

アップデート

.NET 4 パッチについて説明しているMicrosoft KB の記事を見つけました。このページの問題 2 は、あなたが説明した問題に対処しているようです。

Internet Explorer 11 を使用して ASP.NET ベースの Web ページにアクセスすると、Web ページのコンテンツが正しく表示されません。

注:この問題は、Internet Explorer 11 が ASP.NET によって Internet Explorer として認識されないために発生します。

まだ試していませんが、これで治りそうです。

于 2013-11-15T16:57:18.603 に答える