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