부모 페이지와 iframe의 도메인이 서로 다르다면 보안상의 이유로 통신을 할 수 없다.
통신을 할 수 없다는 의미는 window.parent와 같이 부모창의 DOM에 접근할 수 없다는 것이다.
however, for security reasons, the parent page could not communicate with the child Iframe, nor could the child communicate with the parent.
허나, postMessage를 이용하면 parent -> child 또는 child -> parent로의 메세지 전송을 할 수 있다.
child -> parent 로의 메세지 전송 방법에 대해서 알아보면 다음과 같다.
1. parent 페이지가 로딩된다.
2. parent 페이지의 DOM 생성이 완료되면 이벤트 리스너를 등록한다.
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
window.addEventListener("message", processFn, false);
});
function processFn(event) {
var bla = event.data;
alert(bla);
}
function sendChildMessage() {
document.getElementById("ifr").contentWindow.postMessage('sent message from parent.html', '*');
}
</script>
<iframe name="ifr" id="ifr" width="50" height="50" frameborder="0" scrolling="no" src="child.html"></iframe>
<input type="button" value="send child message" onclick="sendChildMessage();">
3. child 페이지의 DOM 생성이 완료되면 parent로 메세지를 전송한다.
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
window.parent.postMessage("sent message from child.html", "*"); // '*' on any domain
window.addEventListener("message", receiveParentMessage, false);
});
function receiveParentMessage(e) {
alert(e.data);
}
</script>
'프로그래밍' 카테고리의 다른 글
문자열 인코딩에 대한 정리 (0) | 2015.08.19 |
---|---|
Servlet의 request, response와 JSP의 request, response는 서로 다른 객체 (0) | 2015.07.23 |
SimpleDateFormat 쓰레드 세이프 하지 않음 (0) | 2015.07.02 |
mybatis multiple select key (2) | 2015.05.21 |
HTTP request 요청 시 Content-Type의 중요성 (6) | 2015.03.09 |
@InitBinder를 이용한 사용자 로그인 정보 @ModelAttribute 객체에 저장하기 (0) | 2015.03.04 |
@Async 사용 시 spring security 세션 정보 추출 주의사항 (0) | 2015.03.04 |
@RequestMapping value에 property values 주입하기 (0) | 2014.12.05 |