본문 바로가기
개발이야기/자바스크립트

자바스크립트 부모 창에서 자식 창으로 값 전달하는 방법

by 시다파파 2025. 5. 8.
반응형

Window 객체로 자바스크립트 부모 창에서 자식 창으로 값 전달하기

Window 객체는 브라우저에서 부모 창과 자식 창 간의 통신을 가능하게 하는 강력한 도구입니다. 이를 활용하면 간단하고 효율적으로 데이터를 주고받을 수 있습니다.

부모 창에서 자식 창 생성하기

window.open() 메서드를 사용하여 새 창을 열고, 반환된 Window 객체를 통해 자식 창을 제어할 수 있습니다:

let childWindow = window.open('child.html', 'childWindow', 'width=400,height=300');

자식 창으로 데이터 전달하기

자식 창이 로드된 후, Window 객체의 속성을 통해 데이터를 전달할 수 있습니다:

childWindow.onload = function() {
    childWindow.myValue = '전달하고 싶은 데이터';
};

자식 창에서 데이터 받기

자식 창에서는 window.opener를 통해 부모 창에서 전달한 데이터에 접근할 수 있습니다:

document.addEventListener('DOMContentLoaded', function() {
    if (window.opener && window.opener.myValue) {
        const receivedData = window.opener.myValue;
        console.log('부모 창에서 받은 데이터:', receivedData);
    }
});

주의사항

  • 보안상의 이유로 같은 도메인에서만 Window 객체를 통한 직접 접근이 가능합니다.
  • 자식 창이 완전히 로드된 후에 데이터를 전달해야 합니다.
  • 브라우저의 팝업 차단 기능을 고려해야 합니다.

Window 객체를 활용한 창 간 통신은 간단하면서도 효과적인 방법이지만, 현대 웹 개발에서는 보안과 사용자 경험을 고려하여 다른 대안적인 방법도 함께 검토하는 것이 좋습니다.

LocalStorage와 SessionStorage로 자바스크립트 부모-자식 창 간 값 전달하기

웹 브라우저의 저장소 기능을 활용하면 부모 창에서 자식 창으로 값을 전달하는 과정을 더욱 안전하고 효율적으로 관리할 수 있습니다. LocalStorage와 SessionStorage는 이러한 데이터 전달에 있어 매우 유용한 도구입니다.

LocalStorage를 이용한 데이터 전달

LocalStorage는 브라우저를 종료해도 데이터가 유지되는 특징이 있어, 장시간 지속되어야 하는 데이터 전달에 적합합니다.

// 부모 창에서 데이터 저장
localStorage.setItem('parentData', JSON.stringify({
    message: '부모 창에서 전달하는 메시지',
    timestamp: new Date().getTime()
}));


// 자식 창에서 데이터 읽기
const parentData = JSON.parse(localStorage.getItem('parentData'));
console.log(parentData.message);

SessionStorage를 활용한 임시 데이터 전달

SessionStorage는 브라우저 세션이 유지되는 동안만 데이터를 저장하므로, 일회성 데이터 전달에 적합합니다.

// 부모 창에서 데이터 저장
sessionStorage.setItem('tempData', '임시 전달 데이터');


// 자식 창에서 데이터 확인 후 삭제
const tempData = sessionStorage.getItem('tempData');
sessionStorage.removeItem('tempData'); // 사용 후 데이터 삭제

데이터 관리 시 주의사항

  • 저장소 용량 제한을 고려하여 필요한 데이터만 전달
  • 민감한 정보는 암호화하여 저장
  • 더 이상 필요하지 않은 데이터는 즉시 삭제
  • 데이터 형식을 JSON으로 통일하여 일관성 유지

이러한 방식으로 부모 창과 자식 창 사이의 데이터 전달을 구현하면, 안정적이고 효율적인 창 간 통신이 가능해집니다.

URL 파라미터를 활용한 자바스크립트 부모-자식 창 값 전달 방법

URL 파라미터는 부모 창에서 자식 창으로 값을 전달하는 가장 간단하고 직관적인 방법 중 하나입니다. 특별한 설정 없이도 즉시 구현이 가능하며, 브라우저 호환성 문제도 거의 없습니다.

구현 방법

부모 창에서는 window.open() 메서드를 호출할 때 URL에 전달하고자 하는 데이터를 쿼리 파라미터 형태로 추가합니다:

// 부모 창에서 데이터 전달
const data = "안녕하세요";
const encodedData = encodeURIComponent(data);
const childWindow = window.open(`child.html?message=${encodedData}`, 'childWindow', 'width=500,height=400');

자식 창에서는 URL에서 파라미터를 추출하여 사용할 수 있습니다:

// 자식 창에서 데이터 받기
const urlParams = new URLSearchParams(window.location.search);
const message = urlParams.get('message');
console.log(message); // "안녕하세요" 출력

장점과 주의사항

장점:

  • 구현이 단순하고 직관적
  • 브라우저 호환성이 우수
  • 페이지 새로고침 후에도 데이터 유지

주의사항:

  • URL 길이 제한으로 대용량 데이터 전송은 부적합
  • 민감한 정보는 URL에 노출되므로 보안상 주의 필요
  • 특수문자는 반드시 인코딩 처리 필요

URL 파라미터를 통한 데이터 전달은 간단한 텍스트나 설정값을 전달할 때 특히 유용하며, 자바스크립트로 부모 창에서 자식 창으로 값을 전달하는 기본적인 방법으로 널리 사용됩니다.

자바스크립트 postMessage로 부모-자식 창 간 안전한 값 전달하기

postMessage 메서드는 부모 창과 자식 창 사이에서 값을 전달할 때 가장 안전하고 효율적인 방법을 제공합니다. 특히 보안적인 측면에서 다른 방법들과 차별화되는 장점이 있어, 현대 웹 애플리케이션에서 널리 사용되고 있습니다.

부모 창에서 자식 창으로 메시지 전송하기

// 자식 창 생성
const childWindow = window.open('child.html', 'childWindow', 'width=400,height=300');


// 자식 창 로드 완료 후 메시지 전송
childWindow.onload = function() {
    childWindow.postMessage({
        type: 'userData',
        content: '부모 창에서 전달하는 중요 데이터'
    }, '*');
};

자식 창에서 메시지 수신하기

// 메시지 이벤트 리스너 등록
window.addEventListener('message', function(event) {
    // 보안을 위한 도메인 검증
    if (event.origin !== "https://trusted-domain.com") return;
    
    // 전달받은 데이터 처리
    const receivedData = event.data;
    document.getElementById('display').textContent = receivedData.content;
});

보안 고려사항

postMessage를 사용할 때는 다음 보안 사항을 반드시 고려해야 합니다:

  1. 메시지 발신 출처 검증
  2. 수신된 데이터의 유효성 검사
  3. 타겟 오리진 명시적 지정

장점

  • 크로스 도메인 통신 가능
  • 구조화된 데이터 전송 지원
  • 동기화된 통신 방식
  • 보안성 강화

이러한 특징들 때문에 postMessage는 자바스크립트로 부모 창에서 자식 창으로 값을 전달하는 가장 현대적이고 안전한 방법으로 인정받고 있습니다.

반응형