IE에서 자동으로 닫히는 팝업 — 올바른 onBlur 동작을 얻는 방법은 무엇입니까?
-
09-09-2019 - |
문제
사용자가 클릭하면 임시 창이 저절로 닫히도록 하고 싶습니다.이는 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();};
제휴하지 않습니다 StackOverflow