1

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

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

しかし、Internet Explorer では動作しないようです。IE 固有の「onfocusout」イベントを参照している他のサイトもいくつかありましたが、必要なものの首尾一貫した動作例を見つけることができませんでした。

スタック オーバーフローは、フォーカスを失ったときに IE ブラウザー ウィンドウを閉じるための最良の方法について何と言っていますか?

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

4

3 に答える 3

2

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は、新しいウィンドウが作成されたときにウィンドウハンドルを確実に返すようには見えません。したがって、ウィンドウを閉じるには、名前でウィンドウを検索する必要があります。
于 2009-04-10T15:03:09.040 に答える
1

試す:

document.onfocusout = window.close();
于 2009-04-09T22:55:27.370 に答える
0

IE固有のコードブロックの一部としてこれを試すことができます。

w.onblur = function() { w.close();};
于 2009-04-09T22:02:35.203 に答える