IE の自動終了ポップアップ — onBlur の適切な動作を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/735992

質問

ユーザーがクリックしてウィンドウから離れると、一時的なウィンドウが自動的に閉じられるようにしたいと考えています。これは Firefox で機能します。

var w = window.open(...);
dojo.connect(w, "onblur", w, "close");

ただし、Internet Explorer では動作しないようです。他のサイトでは IE 固有の「onfocusout」イベントについて言及していますが、必要なものを示す一貫した動作例は見つかりませんでした。

IE ブラウザ ウィンドウがフォーカスを失ったときに閉じる最善の方法について、Stack Overflow は何と言っていますか?

私は Dojo を使用しているので、そのライブラリにショートカットがある場合は情報を歓迎します。それ以外の場合は、標準の IE 呼び出しが最適な応答になります。

役に立ちましたか?

解決

IEで代替手段を考え出しました。

これ:

        that.previewWindowAction = function () {
            var pw =
                window.open(this.link, "preview",
                            "height=600,width=1024,resizable=yes,"
                            + "scrollbars=yes,dependent=yes");
            dojo.connect(pw, "onblur", pw, "close");
        };

IE で動作させるには次のように記述する必要があります。

        that.previewWindowAction = function () {
            var pw =
                window.open(this.link, "preview",
                            "height=600,width=1024,resizable=yes,"
                            + "scrollbars=yes,dependent=yes");
            if (dojo.isIE) {
                dojo.connect
                    (pw.document,
                     "onfocusin",
                     null,
                     function () {
                         var active = pw.document.activeElement;
                         dojo.connect
                             (pw.document,
                              "onfocusout",
                              null,
                              function () {
                                  if (active != pw.document.activeElement) {
                                      active = pw.document.activeElement;
                                  } else {
                                      window.open("", "preview").close();
                                  }
                              });
                     });

            }
            else {
                dojo.connect(pw, "onblur", pw, "close");
            }
        };

理由は?

  • IE では、ウィンドウ オブジェクトはブラー イベントに応答しません。したがって、独自の onfocusout イベントを使用する必要があります。
  • IE では、onfocusout はほとんどの HTML 要素によって送信されるため、どの onfocusout がウィンドウのフォーカスの喪失によって引き起こされたものであるかを判断するためのロジックを追加する必要があります。onfocusout では、ドキュメントの activeElement 属性は常に前の値とは異なります。 を除外する ウィンドウ自体がフォーカスを失ったとき。これが窓を閉める合図です。
  • IE では、新しいウィンドウ内のドキュメントは、ウィンドウが最初に作成されたときに onfocusout を送信します。したがって、onfocusout ハンドラーは、フォーカスが当たった後にのみ追加する必要があります。
  • IE では、新しいウィンドウが作成されたときに、window.open が確実にウィンドウ ハンドルを返しないようです。したがって、ウィンドウを閉じるには名前でウィンドウを検索する必要があります。

他のヒント

試します:

document.onfocusout = window.close();

あなたは、IE固有のコードブロックの一部としてこれを試してみてください。

w.onblur = function() { w.close();};
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top