
팁과노하우
쪽지 내용 중에 링크를 클릭하면
쪽지 내용 중에 링크를 클릭하면 부모창(메인 화면)을 해당 링크로 이동시키고 쪽지 팝업창은 자동으로 닫히게 하는 방법입니다.
리빌더에 기본 추가가 되면 너무 좋을거 같네요. ( 리빌더님 한번 봐 주세요 ㅎㅎ )
/theme/rb.basic/skin/member/rb.member의 스킨 파일 중에 memo_view.skin.php 파일에서 아래 내용을 찾아
<p>
<?php echo conv_content($memo['me_memo'], 0) ?>
</p>
(방법1) 링크를 클릭하면 쪽지창은 닫히고 부모창에 링크가 연결이 되는 방법
<p id="memo_content_a_close">
<?php echo conv_content($memo['me_memo'], 0) ?>
</p>
<script>
$(document).ready(function() {
// 쪽지 내용 안의 모든 <a> 태그를 찾아 클릭 이벤트 적용
$('#memo_content_a_close a').on('click', function(e) {
var linkUrl = $(this).attr('href'); // 클릭한 링크의 URL 가져오기
if (!linkUrl) return;
// [보안 보완] 대소문자 구분 없이 javascript: 프로토콜 및 앵커(#) 차단 (XSS 방지)
var trimmedUrl = linkUrl.trim().toLowerCase();
if (trimmedUrl.startsWith('javascript:') || trimmedUrl.startsWith('#')) {
return;
}
e.preventDefault(); // 정상적인 링크일 때만 기본 이동 방지
// [보완] 부모창(opener)이 존재하고 아직 닫히지 않았는지 엄격히 체크
if (window.opener && !window.opener.closed) {
// 만약 외부 링크라면 부모창과의 연관 관계(opener)를 끊어서 보안 강화
var currentHost = window.location.hostname;
try {
var targetUrl = new URL(linkUrl, window.location.origin);
if (targetUrl.hostname !== currentHost) {
window.opener.opener = null; // 타겟 페이지가 원래 부모창을 제어하지 못하도록 방어
}
} catch(err) {
// URL 파싱 에러시 안전을 위해 패스
}
// 부모창을 주소로 이동
window.opener.location.href = linkUrl;
// 현재 쪽지 팝업창 즉시 닫기
self.close();
} else {
// [UX 보완] 만약 메인창(부모창)이 이미 닫혀 있다면, 현재 팝업창 자리에서 링크를 열어줍니다.
window.location.href = linkUrl;
}
});
});
</script>
<p id="memo_content_a_close">
<?php echo conv_content($memo['me_memo'], 0) ?>
</p>
<script>
$(document).ready(function() {
$('#memo_content_a_close a').on('click', function(e) {
var linkUrl = $(this).attr('href');
if (!linkUrl) return;
// 보안 보완: 대소문자 상관없이 javascript: 또는 #으로 시작하면 기본 동작 방지
var trimmedUrl = linkUrl.trim().toLowerCase();
if (trimmedUrl.startsWith('javascript:') || trimmedUrl.startsWith('#')) {
return;
}
e.preventDefault(); // 정상적인 링크일 때만 이동 방지 적용
var currentHost = window.location.hostname;
try {
var targetUrl = new URL(linkUrl, window.location.origin);
// 1. 내부 링크인 경우 (기존 로직 유지 + 부모창 체크 보완)
if (targetUrl.hostname === currentHost) {
if (window.opener && !window.opener.closed) {
window.opener.location.href = linkUrl;
self.close();
} else {
window.location.href = linkUrl;
}
}
// 2. 외부 링크인 경우 (보안 보완: rel=noopener 적용)
else {
window.open(linkUrl, '_blank', 'noopener,noreferrer');
}
} catch (error) {
// URL 파싱 에러 시 안전하게 외부 창으로 처리
window.open(linkUrl, '_blank', 'noopener,noreferrer');
}
});
});
</script>
<p id="memo_content_a_close">
<?php echo conv_content($memo['me_memo'], 0) ?>
</p>
<script>
$(document).ready(function() {
$('#memo_content_a_close a').on('click', function(e) {
var linkUrl = $(this).attr('href');
if (!linkUrl) return;
// 보안 보완: 대소문자 상관없이 javascript: 또는 #으로 시작하면 기본 동작 방지
var trimmedUrl = linkUrl.trim().toLowerCase();
if (trimmedUrl.startsWith('javascript:') || trimmedUrl.startsWith('#')) {
return;
}
e.preventDefault();
// 보안 보완: 모든 새 창 열기에 noopener, noreferrer 옵션 추가하여 Tabnabbing 방어
window.open(linkUrl, '_blank', 'noopener,noreferrer');
});
});
</script>
- 다음글웹호스팅에서 redis를 사용할 수 있는지 확인하는 방법2026.07.08
댓글목록


@리빌더
레인보우님께는 죄송스럽지만
저는 비추천 합니다.
홈페이지 쪽지함에서 쪽지 안의 링크를 클릭한다고
부모창<< 홈페이지 자체가 링크이동이 되어버리는건
어떤 커뮤서도 찾아볼수 없는 기능 입니다.
홈페이지 운영진은 어떠한 환경이나 상황에서든
회원분들이 유입 및 홈페이지내 머무르길 바라지....
이걸 링크를 클릭한다고 다른 창으로 보내버린다???
비추드립니다;;;;
쪽지창은 자동으로 닫히고 홈페이지는 유지한채 새로운 탭이나 창으로 링크를 이동시키는건 반대하지 않습니다.
2026-07-13 18:10


