다른 도메인간 iframe 리사이징

Document URL : http://bnufactory.com/blog/19783
뜬금없이 | Posted on May 30th, 2009 at 09:56 by BNU | Modify

다른 도메인의 iframe 페이지에 자바스크립트로 접근이 불가능합니다.
자바스크립트가 샌드박스상에서 동작하고, 보안상 막혀있는 부분이죠.
예전에는 iframe페이지의 DOM 접근도 가능했던 것 같은데 어느샌가 막혔죠.
어느 시점인지 모르겠네요. ^^;


다른 도메인간 iframe의 크기를 자동으로 맞춰주기 위해서라던가
페이지 내의 변수 등을 가져오기 위해 접근해야 하는 경우가 있습니다.
이 경우 제한적으로 iframe 페이지를 참조할 수 있는 방법이 있습니다.
iframe로 불려오는 페이지의 편집권한이 있어야만하고, 무진장 제한적이지만 말이죠;
(Ajax, falsh를 사용시 크로스도메인 설정과는 별개입니다.)

iframe의 크기 자동조정을 위한 예로 들어 설명하겠습니다.

iframe.gif
[▲ A사이트에서 B사이트의 페이지를 iframe으로 로드]

우선, B페이지의 크기를 구해야하는데 A페이지에서는 자바스크립트로 접근이 불가능합니다.
iframe 요소의 크기를 가져와 봤자, iframe 태그로 설정한 크기를 구해올 뿐
B페이지의 실제 크기를 구해오지는 못합니다.


B페이지의 크기를 구하려면 트릭을 사용해야 합니다.
우선 요약하자면, B페이지안에서 A사이트의 또 다른 C페이지를 로드하는 겁니다.

cross.gif
[▲ B페이지안에 A사이트와 동일 도메인의 C페이지 로드]

위와 같이 AC는 같은 도메인상의 페이지이어야 합니다.
하지만, AC에서 B를 직접 참조할 수 없기는 마찬가지입니다.
예전에 흔히 알려진 것으로는 C페이지에서 B페이지의 자바스크립트 제어가 가능하다는 건데
이건 보안버그로 판단되었는지 고쳐진 부분이라 이것도 더 이상 접근되지 않게되었죠.

그럼 어떻게 하느냐?
B에서 값을 던져 주면 됩니다.
물론, B에서도 AC에 직접적으로 접근이 불가하므로,
B에서 C페이지의 URL에 파라미터로 값을 넘겨주도록 해야 합니다.

B에서 자바스크립트로 자신의 페이지 크기를 구한 다음,
C페이지의 URL에 그 크기를 파라미터로 붙여서 로드해야 합니다.

A도메인/C페이지.html?width=500&height=300

위와 같이 말이죠.
이걸로 준비는 끝나고 간단히 처리만 하면 됩니다.

C페이지에서 자신이 파라미터를 받아서 window.top.document로 A페이지에 접근이 가능합니다.
AC는 동일 도메인이므로 DOM 접근도 가능하고, 함수나 변수 참조도 가능합니다.

끝~
iframe 크기 조정을 위한 페이지 크기 뿐 아니라 변수 등 여타의 값도 가능할테구요.


색을 바꿔하느라 조잡하고 설명이 부드럽지 못했을지 모르겠습니다.
URL의 파라미터로 값을 넘기는 것이라 상당히 제한적이기도 합니다.

PHP스쿨의 질답에서 답변달고 정리차원에서 적어봤습니다. :)

Tagged :
       

Trackbacks : 1

Trackback URL : http://bnufactory.com/blog/19783/820/trackback
2009.12.04 at 17:08:24
관련 내용을 찾다가 발견했습니다. 아래는 원문을 잘라왔습니다. 출처 : http://bnufactory.com/blog/textyle/19783 ------------------------------------------------------------------ 다른 도메인의 iframe 페이지에 자바스크립트로 접근이 불가능합니다. 자바스크립트가 샌드박스상에서 동작하고, 보안상 막혀있는 부분이죠. 예전에는 iframe페이지의 DOM 접근도 가능했던..

Comments : 2

Author 초짜
2009.10.03 at 11:01:36
댓글 | |

이걸찾을려고 정말 많이 돌아다녔습니다.

 

지금전 a와 b가 바뀐상황이구요 아이팟터치에서 볼려고 하고있구요

 

b사이트(일반pda사이트)를 키워서 a사이트(아이팟터치사이트)에 맞게 할려고 하고 있습니다.

 

b사이트는 원래 http://m쩜todaysppc.com/ 사이트이구요 밑에는 프레임으로 리사징을 한거로 보이구요

 

http://xguru.net/m/ifr.html?scale=1.0&sn=Todays%20PPC&url=http://m쩜todaysppc.com/

 

위에써주신거는 이해가 가는데 프레임을 어떻게 넣어야 되는지를 모르겠어서요 ㅠㅠ

 

이글은언제 보실지 모르지만 부탁드립니다. totali1209@gmail.com 으로나 사이트 즐찾해놓았으니 자주 방문하겠습니다.  감사합니다.

쩜to 그냥하니 금지어라고 해서요 ㅠㅠ 죄송합니다.

Author 최완주
2010.01.05 at 19:59:25
댓글 | |

BNU님의 현재 위치 출력 위젯을 설치했는데 1차 메뉴만 나타나고 2차 3차 메뉴는   보이지 않네요

예를 들면  3차 메뉴를 선택해도 왼쪽에는 1차 메뉴만 나오고 오른쪽에도 HOME > 1차메뉴 형식으로만

나와서 실제 하위 메뉴 위치가 출력되지 않아요  꼭 해결 방법을 알려주세요.

지금 적용하고자 하는 홈페이지는 http://sgjch.kr입니다