본문 바로가기

hybrid app/HTML5

[html5] Cross Document Messaging (postMessage, onmessage)

iframe으로 데이터를 전달하고 받는 방법을 찾다가 알게 되었다.


크로스 도큐먼트 메시징(Cross Document Messaging)을 사용하면 


두개의 웹 페이지가 서로 메시지를 주고 받을 수 있다.


Cross Document Messaging의 장점은 서로 다른 도메인에 존재하는 페이지끼리도 메시징이 가능하다.


Same Origin Policy에 적용받지 않아 도메인을 넘나드는 연동 구조에 적합하다.


데이터 전송하기

window.postMessage(data, [ports], targetOrigin)


data : 전달할 메시지

ports : 메시지 포트(생략 가능)

targetOrigin : 메시지를 수신받는 도메인을 지정한다. 대상이 특정 도메인이 아니라면 *로 지정


데이터 수신하기

데이터 수신하는 측에서는 window객체의 message 이벤트를 구현하면 됩니다.

window.onmessage = function(e){

console.log(e.data, e.origin, e.source);

}

data : 송신한 데이터

origin : 메시지를 보내는 곳의 도메인 정보

source : 메시지를 보내는 윈도우 객체


처음에 iframe으로 데이터를 전달하고 받는 방법을 찾다가 Cross Document Messaging을 알게 되었다고 했는데 


직접 예제를 보면


test1.html

<!DOCTYPE html>

<html>

<head></head>

<body>

<button onclick="sendMessage();">Send</button>

<iframe id="test1" src="test2.html" width="800" height="500"></iframe>

<script type="text/javascript">

function sendMessage(){

var dest = document.getElementById("test1");

dest.contentWindow.postMessage("iframe으로 보내는 메세지","*");

}

</script>

</body>

</html>


test2.html

<!DOCTYPE html>

<html>

<head></head>

<body>

test2.html

<script type="text/javascript">

window.onmessage = function(e){

alert(e.data);

}

</script>

</body>

</html>



test1.html에서 send버튼을 누르면 test2.html로 전송하여 메시지를 출력해 준다.