postMessage 통신 방법 / 부모창, 자식 팝업 간 데이터 전달 방법

postMessage 통신 시, 별도의 CORS 설정은 필요하지 않습니다.


부모창 → 자식 팝업 메시지 전송 방법

부모창에서 postMessage 전송

// 자식 팝업 열기
const popup = window.open("http://자식팝업IP:포트/팝업페이지경로?파라미터=값", "_blank");

// 자식 팝업에 postMessage 보내기
setTimeout(() => {
  popup.postMessage({ message: "메시지 값" }, "http://자식팝업IP:포트");
}, 500);

부모창에서 자식 팝업으로 postMessage 전송 방법입니다.

자식 팝업에 메시지 수신 이벤트 리스너 작성

window.addEventListener("message", (event) => {
  // 부모창 origin 확인 필수
  if (event.origin !== "http://부모창IP:포트") {
    return;
  }

  if (event.data.message === '메시지 값') {
    console.log("부모창에서 받은 메시지 : ", event.data.message);
  }
});

자식 팝업에 부모창 메시지 수신 이벤트 리스너를 작성해두면 postMessage를 받을 수 있습니다.


자식 팝업 → 부모창 메시지 전송 방법

자식 팝업에서 postMessage 전송

// 부모창에 postMessage 보내기
opener.postMessage({message : '메시지 값'}, "http://부모창IP:포트");
또는
opener.postMessage({message : '메시지 값'}, "*"); // 모든 도메인 허용 : 테스트 시 사용

자식 팝업에서 부모창으로 postMessage 전송 방법입니다.

부모창에 메시지 수신 이벤트 리스너 작성

window.addEventListener("message", (event) => {
  // 자식 팝업 origin 확인 필수
  if (event.origin !== "http://자식팝업IP:포트") {
    return;
  }

  if (event.data.message === '메시지 값') {
    console.log("자식 팝업에서 받은 메시지 : ", event.data.message);
  }
});

부모창에 자식 팝업 메시지 수신 이벤트 리스너를 작성해두면 postMessage를 받을 수 있습니다.