2009-10-08 6 views
1

다양한 iframe (A, B, C, D)이있는 페이지가 있습니다.이 모든 페이지는 항상 완벽하게 볼 수 있습니다. 함께, 그들은 내 응용 프로그램의 UI의 다양한 부분을 구성합니다. 이 iframe 중 하나 인 iframe D에는 사용자 액션에 의해 가끔 표시되는 더 작은 iframe (iframe X)이 있습니다. 사용자가 외부에서 클릭 할 때마다 자동으로 사라집니다. 본문에 onclick을 넣어 iframe D에서 쉽게 처리 할 수 ​​있습니다. iframe D의 본문에서 실제로 클릭을 감지하면 iframe X에서 클릭하지 않는다는 것을 의미하므로 CSS를 통해 iframe X를 숨길 수 있습니다. 문제 없어.특정 iframe 외부에서 onclick 이벤트를 감지하는 방법은 무엇입니까?

문제는 다른 iframe-A, B 및 C입니다. 사용자가 해당 iframe을 클릭하면 iframe X도 숨기려고합니다. 현재, 나는 잘 작동하고있다. 각각의 iframe (A, B, C)에 대해 바디 클릭을 iframe D에 전달하는 코드가 있습니다. iframe A, B, C 모두 iframe X에 대한 지식이 있으므로이 방법이 마음에 들지 않습니다. 이것에 대한 필요가 없으며 iframe X에서 제공하는 기능을 지원하기 위해 파일을 추가해야합니다. iframe D 내에서 외부 onclick 이벤트를 감지 할 수있는 방법이 있습니까? 이렇게하면 iframe D의 iframe D 표시/숨기기 로직이 그대로 남겨 지므로 코드를 훨씬 쉽게 움직일 수 있습니다.

내가 onclick을 모니터링가는 것을 얻을 경우 - 예를 들어 iframe이 A가 특정 요소에 설정된 일부 온 클릭 이벤트가있는 경우, - - 그것은 모든 클릭을 처리한다면 나는 또한 궁금하네요 또한 그 클릭을 잡을 확신? 내 현재 해결 방법에 결함이있는 것 같습니다 (iframe A, B, C가 body onclicks를 iframe D에보고 함). 특정 클릭이 body onclick을 트리거하지 않습니다.

미리 감사드립니다. 그러나 iframe을 제거하는 것이 프로젝트의이 시점에서 현실적이지 않음을 명심하십시오.

답변

1

이벤트는 iframe 경계를 넘어 버블하지 않으므로 보안 상 위험 할 수 있습니다. iframe에 은행 웹 사이트를 삽입 한 피싱 사이트를 상상해보십시오. 사용자가 포함 된 프레임에 입력 한 비밀번호를 기록하려면 onkeypress 핸들러가 설치되어 있어야합니다.

가장 좋은 방법은 아마도 외부 프레임에 바디 핸들러를 설치하고 onunload 핸들러를 설치하여 필요에 따라 바디 핸들러를 다시 설치할 수 있습니다.

예, click 이벤트에서 버블 링을 취소하는 이벤트 핸들러는 body 이벤트 핸들러에서이를 숨 깁니다.

1

외부 문서에 YUI 패널 개체를 넣습니다. 대신 iframe이 X을 보여주는의

는()를 모달 모드, 유이 패널을 표시하고 패널 내용에 ... SRC = X>

당신이 전화 parent.panel.show <은 iframe을 넣어 모든 프레임에 걸쳐 표시되며 패널 외부의 모든 클릭이 패널을 닫을 수 있도록 쉽게 맞춤 설정할 수 있습니다.

0

iframe 제한 사항을 고려하여 신뢰할 수있는 방법으로이를 수행 할 수 없습니다. 많은 해결 방법이있을 수 있지만 사용자의 요구에 얼마나 적합한 지 잘 모릅니다. 어쩌면, 당신은 아약스에 의해 백엔드 핑 수 있고 그것은 변화를 일으킬 것 인가? 또는 열린 자식과 닫힌 자식의 두 가지 버전을 사용하면 부모 숨기기/표시 만 조작 할 수 있습니다. 또는 iframe X를 iframe이 아닌 다른 것으로 교체하십시오. 등 사용자의 특정 요구에 맞는 적절한 솔루션이 아닐 수 있습니다. 그러나 다만 아이디어.

관련 문제