2014-12-30 2 views
1

해결해야 할 재미있는 문제가 있습니다. 요컨대 Internet Explorer는 window.onblur 이벤트를 사용하여 iFrame에 요소를 집중시킵니다. 이 때문에 그것은 재귀이고 당신은 iFrame 밖에서 아무것도 클릭 할 수 없습니다. 문제는 IE9, IE10, IE11 (IE8 이하는 아님)에서 발생합니다. 여기Internet Explorer Iframe 재귀 window.onblur

테스트를 : Try it (in IE)

여기에서 다운로드 : Download it

내 진짜 질문은 : iframe을 외부에서 iframe이 내부 window.onblur 이벤트를 덮어 쓸 수있는 방법이 있나요? 이 버그입니까? 그리고 Microsoft에보고해야합니까?

업데이트

당신의 도움 @ 조나단 샘슨에 대한

감사합니다, 여기에서 볼 수 있듯이이 작품 :

See working example - IFrame을가 완전히

답변

0
를 덮어 쓸 수 있도록로드 될 때까지 기다려야합니다

저는 Internet Explorer 팀에서 일하면서 기꺼이이 문제를 조사 할 것입니다. iframe에서 onblur 처리기를 덮어 쓰는 것에 대한 질문에 대답하려면 두 문서가 공통 도메인을 공유하는 경우 입니다. 귀하의 예에서는 이것이 사실입니다.

document.querySelector("iframe").contentWindow.onblur = null; 

또는, 당신은 단지 window.top를 사용하여 가장 높은 창으로 결합 할 수 있습니다.

+0

감사합니다. 사실 그것은 작동합니다. 그러나 IFrame이로드되거나 덮어 쓸 때까지 기다려야합니다. IFrame 외부에서이 작업을 수행하는 좋은 방법이 있기를 바랍니다. 그러나이 답변으로 문제가 해결되었습니다. – CodingYourLife

+0

@CodingYourLife 이상적으로는 iframe 내에서 * window.top 대신 바인딩되는 코드 *를 변경하거나'window! == window.top '인 경우 단순히 onblur에 핸들러를 추가하는 것을 거부해야합니다. 위쪽 창에서 변경해야하는 경우 iframe의 DOMContentLoaded 또는 Load 이벤트에 바인딩하여 코드를 실행하여'setTimeout'을 사용할 필요가 없습니다. – Sampson

+0

해결 방법에 대한 내 특정 문제가 해결되었습니다. 필자의 경우에는 iFrame src를 변경 한 탐색 탭이있었습니다 (다른 방법은 없었습니다). 로드 이벤트 (iFrame 컨텐츠 페이지에 액세스 할 수 없음)에 연결하지 못하고 onblur를 1 초마다 다시 설정해도 시도했지만 onblur가 줄 이후 null로 설정하지 않은 디버거에서도 볼 수있었습니다. 내가 한 것은 사용자가 현재 탭에서 나가길 원하는지 묻는 iFrame을 포함하여 페이지에서 새로운 onblur 이벤트였습니다. 그렇다면 IFrame src를 about : blank로 설정 한 다음 onblur를 덮어 씁니다. -> 그것을 "기능"으로 바꿨습니다 ^^ – CodingYourLife