iframe 사용시 주의점


iframe을 이따금씩 사용하게 되는데,
그거 뭐 별거 있어 냥 하믄되지라고 시작했다가
iframe에서 form전송 하나 하는데 낭패를 보게된적이 있었다.

아래 두가지정도만 미리 알고 시작하면
조금더 수월하게 시작할 수 있었을 듯 하다.

1. cross domain 문제

parent 와 child 사이트가 서로 다른 주소를 사용하면 정상적으로 동작하지 않는다.
www.abc.com 내에서
<iframe src="http://www.zyx.com"></iframe>

도메인주소는 같지만 서브도메인 주소가 다른 경우에도
마찬가지로 같은 문제가 발생한다.
www.abc.com 내에서
<iframe src="http://sub.abc.com"></iframe>

그래서 이럴경우에는 도메인 주소를 인위적으로 동일하게 설정을 해주어야한다.
<script>
document.domain="abc.com"
</script>

결론적으로 document.domain의 값이 일치해야만
cross domain은 해결이 되는것 같다.
기본적으로 별다른 설정이 없다면 document.domain은
서브도메인 주소까지 가지고 있다.

2. form전송

위에처럼 cross domain 문제를 해결하고,
form을 만들어
ajax가 아닌 서브밋을 할경우
리턴페이지가
현재 iframe 내부가 아닌 새창에서 호출될 수 있다.
form의 속성값중 'target'을 설정해줘서 해결을 해야 한다.
form.target = '_self'

속성값은 '_self' 외에도 몇가지 더 있으니 참조해서 사용하면 좋을듯 하다.
ValueDescription
_blankOpens in a new window
_selfOpens in the same frame as it was clicked (default)
_parentOpens in the parent frameset
_topOpens in the full body of the window
framenameOpens in a named frame
http://www.w3schools.com/jsref/prop_form_target.asp

3. iframe resize

 <script type="text/javascript">
  function sendSize(obj) {
        obj.style.height = "auto"; 
        contentHeight = obj.contentWindow.document.documentElement.scrollHeight;
        if(contentHeight>960)
            obj.style.height = contentHeight + 10 + "px";
        else
            obj.style.height = "960px";
     }
 </script>
<iframe onload="sendSize(this)"></iframe>

댓글

댓글 쓰기

이 블로그의 인기 게시물

[spring] log4j 설정 및 사용법

[linux] 백그라운드 작업 nohup [xxx.sh] &

[spring] 인터셉터 와 필터