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를 사용할 때는 다음 보안 사항을 반드시 고려해야 합니다:
- 메시지 발신 출처 검증
- 수신된 데이터의 유효성 검사
- 타겟 오리진 명시적 지정
장점
- 크로스 도메인 통신 가능
- 구조화된 데이터 전송 지원
- 동기화된 통신 방식
- 보안성 강화
이러한 특징들 때문에 postMessage는 자바스크립트로 부모 창에서 자식 창으로 값을 전달하는 가장 현대적이고 안전한 방법으로 인정받고 있습니다.
'개발이야기 > 자바스크립트' 카테고리의 다른 글
자바스크립트로 팝업 창 쉽게 띄우고 완벽 제어하기 (0) | 2025.04.23 |
---|---|
자바스크립트 부모창에서 자식창 변수 참조하기 (0) | 2023.06.08 |
자바스크립트 부모창 함수 호출 (0) | 2017.01.22 |
자바스크립트 팝업 띄우기 (0) | 2016.12.25 |