팁과노하우

2026.07.12 08:31

쪽지 내용 중에 링크를 클릭하면

쪽지 내용 중에 링크를 클릭하면 부모창(메인 화면)을 해당 링크로 이동시키고 쪽지 팝업창은 자동으로 닫히게 하는 방법입니다.

리빌더에 기본 추가가 되면 너무 좋을거 같네요. ( 리빌더님 한번 봐 주세요 ㅎㅎ )

/theme/rb.basic/skin/member/rb.member의 스킨 파일 중에 memo_view.skin.php 파일에서 아래 내용을 찾아

<p>
<?php echo conv_content($memo['me_memo'], 0) ?>
</p>

** 기존 코드에 보안부분 보완을 하고 수정 및 방법을 3가지로 나누어 봤습니다.

(방법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>

(방법2) 링크를 클릭하면 쪽지창이 닫히고 내부 주소면 부모창에 링크가 연결이 되고, 외부 링크면 새창으로 링크가 연결되는 방법

<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>

(방법3) 링크를 클릭하면 쪽지창이 자동으로 닫히고 링크는 새창에서 열리는 방법

<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>




  • 공유링크 복사
    미니홈 쪽지 구독하기
    구독하고 알림받기

    댓글목록

    profile_image
    리빌더미니홈 1:1 대화하기  23시간 전

    좋은 의견 감사합니다.
    쪽지 내 a 태그클릭시 창이 닫히는 내용이네요.
    확인 후 반영하도록 하겠습니다.

    2026-07-13 10:21

    profile_image
    bank365미니홈 1:1 대화하기  15시간 전

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

    쪽지창은 자동으로 닫히고 홈페이지는 유지한채 새로운 탭이나 창으로 링크를 이동시키는건 반대하지 않습니다.

    2026-07-13 18:10

    profile_image
    리빌더미니홈 1:1 대화하기  14시간 전

    네. 외부링크가 있을 수 있으니 새탭이 맞을것같습니다.
    내부 링크인지 범용적으로 파악할 수 있으면 내부링크는 부모창에서 처리할 수 도 있을것같네요,

    2026-07-13 19:48

    profile_image
    rainbow미니홈 1:1 대화하기  12시간 전

    내부, 외부, 부모창, 새창에서 3가지 경우로 나누어 적용해 봤습니다.

    2026-07-13 21:36

    profile_image
    rainbow미니홈 1:1 대화하기  12시간 전

    추가 보완을 해 봤습니다.
    3가지 경우로 나누어서 적용해 놨으니 원하는 대로 적용하면 될 거 같아요.

    2026-07-13 21:33