배너 이미지

[자바스크립트] 부모창과 자식창 정보 교환

최종 수정일 : (1년 전)

window.open() 혹은 a (anchor) 태그에 target="_blank" 어트리븃을 붙여서 연 윈도우와 원래 윈도우 간 정보 교환하는 방법입니다.

새 윈도우를 연 창을 부모창, 부모창에 의해 window.open()이나 a 태그로 열린 창을 자식창이라 칭하겠습니다.

부모창에서 자식창 접근

<!DOCTYPE html>
<html>

<head>
    <title>부모창</title>
</head>

<body>
    <input type="text" id="parentInput">
    <div id="childOutput"></div><button id="getChildOutput">자식창 입력 가져오기</button>
    <script>
        const newWindow = window.open('tmp-child.html');
            
        document.getElementById("getChildOutput").addEventListener("click", () => {
            document.getElementById("childOutput").innerText = newWindow.document.getElementById("childInput").value
        })
    </script>
</body>

</html>

window.open() 함수를 변수에 집어넣고(예시에선 newWindow), 해당 변수에서 정보를 가져옵니다.

변수명.document.querySelector(".element")와 같은 방식입니다.

자식창에서 부모창 접근

<!DOCTYPE html>
<html>

<head>
    <title>자식창</title>
</head>

<body>
    <input type="text" id="childInput">
    <div id="parentOutput"></div><button id="getParentOutput">부모창 입력 가져오기</button>
    <script>
        document.getElementById("getParentOutput").addEventListener("click", () => {
            document.getElementById("parentOutput").innerText = opener.document.getElementById("parentInput").value
        })
    </script>
</body>

</html>

따로 변수는 필요 없이 opener가 부모창을 리턴합니다

opener.document.querySelector(".element")와 같이 사용하실 수 있습니다.


길게 설명할 필요가 크게 없는 것들이라, 구구절절한 설명은 생략했습니다.

예시에서 보여 드린 것처럼 일반적으로 읽는 것만 가능한 게 아니라

opener.document.documentElement.classList.add("hello")

이렇게 부모창의 돔을 자식창에서 직접 조작할 수도 있습니다.


profile

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

주의 : 비밀 댓글 사용 시 수정 기능을 이용할 수 있는 시간이 지나면 작성자도 내용 확인이 불가능합니다.