JavaScript/JavaScript,jQuery
[JavaScript] Window.postMessage()
mingmongs
2025. 3. 17. 13:18

window.postMessage() 메소드는 Window 오브젝트 사이에서 안전하게
cross-origin 통신을 할 수 있게 해준다.
예시로, 페이지와 생성된 팝업 간의 통신이나,
페이지와 페이지 안의 iframe 간의 통신에 사용할 수 있다.
또 데이터를 보내는 HTTP 요청을 생성하지 않으며, DOM 기반 통신에 사용된다.
위의 내용처럼 postMessage() 메소드를 통해 parent -> child 또는 child -> parent로의 메세지 전송을 할 수 있다.
1) 기본 사용법
1-1) 메시지 보내기
window.postMessage( data, [ports], targetOrigin );
- data : 전달할 메시지 ( string )
- ports : 메시지 포트(생략 가능)
- targetOrigin : 메시지를 수신받는 도메인. 특정 도메인이 아니라면 * 로 지정
1-2) 메시지 받기
window.addEventListener( 'message', function( e ) {
// e.data가 전달받은 메시지
console.log(e.data);
} );
- e.data : 전달받은 메시지
- e.origin : 송신자의 도메인
2) 부모가 자식 window에 메시지 전달
부모
<button id="btn">메시지 전송</button>
.
.
.
btn.addEventListener('click', function(e) {
var child = document.getElementById("childWindow");
child.contentWindow.postMessage("부모->자식 전송", "*");
});
자식
window.addEventListener('message', function (e) {
console.log(e.data); // "부모->자식 전송" 출력
});
3) 자식이 부모 window에 메시지 전달
부모
window.addEventListener('message', function (e) {
console.log(e.data); // "자식->부모 전송" 출력
});
자식
<button id="btn">메시지 전송</button>
.
.
.
btn.addEventListener('click', function(e) {
window.parent.postMessage(("자식->부모 전송", "*");
});
[reference]
https://developer.mozilla.org/ko/docs/Web/API/Window/postMessage
http://blog.302chanwoo.com/2016/08/postmessage/