STUDY/React

React | iframe띄우기 ( + JSP, postMessage )

개미606 2020. 11. 14. 17:22

본인인증 모듈을 연결하면서 팝업으로 띄웠다가 아이프레임으로 변경했다.

팝업도 나쁘지는 않았지만 사파리에서 window.close가 안 먹히는지 몰랐다. 사파리 누가써...?ㅠ

 

iframe컴포넌트 생성

일단 아이프레임을 작성해준다. 모달처럼 띄워줬음.

이 때 서버측 주소를 src주소로 설정했는데, X-Frame어쩌구 에러 발생..

+ Spring Boot | 스프링 시큐리티 X-Frame-Option 설정

import React from "react";

const IdentityAuthiFrame = () => {
  return (
    <div>
      <iframe src="url" />
    </div>
  );
};

export default IdentityAuthiFrame;

 

일단 잘 띄워지기는 하는데, 본인인증이 완료되고 난 결과값을 어떻게 알아내지 싶었다.

window.parent...어쩌구 하면 Uncaught DOMException발생... 

postMessage를 사용해야 한다고 함. 안전하게 window간의 통신을 가능하게 해준답니다...

 

클라이언트 측에 addEventListener등록

아이프레임에서 보낸 메시지를 듣겠다~~

 useEffect(() => {
    window.addEventListener(
      "message",
      (e) => {
        if (e.origin === SERVER_URL && e.data.message) {
          // 생략
        }
      },
      false
    );
  }, []);

 

아이프레임으로 띄운 html혹은 jsp에서는 postMessage로 메시지 전송

window.parent.postMessage({ message: "어쩌구저쩌구" }, '*');

 

 

Window.postMessage()

The window.postMessage() method safely enables cross-origin communication between Window objects; e.g., between a page and a pop-up that it spawned, or between a page and an iframe embedded within it.

developer.mozilla.org