Q&A

혹시 XE자료중에

2016.03.07 08:14
795
0

외부링크면 무조건 새창으로 열리게 하는 그런 기능의 자료가 있나요?

이거 은근히 신경쓰이죠...  

 

운영자 입장에서는 외부사이트로 전환되면 다시 돌아오기 불편한 현재창에서 열리는게 별고 달갑지 않지요.

 

이거 혹시 자료가 ... 있을까요?

댓글 47

  • 검색을 하다보니 이런 댓글이 보이는데요..
    board.default.js 파일에...

    jQuery(function(){ jQuery('.xe_content[class^=document_] a').attr('target', '_blank'); });
    jQuery(function(){ jQuery('.xe_content[class^=comment_] a').attr('target', '_blank'); });

    이게 잘 되는거면 여기서 자신의 사이트가 아니라면 이라는 조건을 걸어줄 수 있을까요?

     

     

    윽.. 스케치북5 js 에는 저런게 없네요 ㅡㅡ;

  • jQuery(function() {

        jQuery('.xe_content[class^=document_] a, .xe_content[class^=comment_] a').each(function() {

            if(this.hostname !== window.location.hostname) {

                $(this).attr('target', '_blank');

            }

        });

    });

  • @기진곰
    꺅~~~ 밑에 댓글 다는중에 답 주셨네요. 감사합니다. 넙죽~~~
  • @기진곰
    저희 사이트에 맞게 수정할게 있나요??? 현재창으로 열려버리네요...
  • @웹지기
    그냥 링크의 도메인과 현재 페이지의 도메인을 비교하는 코드인데...

    비교 조건이 상당히 엄격하기 때문에 현재창으로 열려야 하는 링크가 새창으로 열리는 문제는 있을 수 있지만... 반대로 새창으로 열려야 하는 링크가 현재창으로 열린다면 어딘가 스크립트 오류가 있어서 아예 저 부분이 실행되지 않는 게 아닌지 확인해 볼 필요가 있겠습니다.
  • 오... 스케치북5 스킨의 board.js 파일 끝에 추가해 주니 새창으로 열리네요..

    근데 우리 사이트는 새창으로 안열리게 해주고 싶은데요..... 윽...
  • @웹지기

    if(this.hostname !== window.location.hostname) {

    이 부분을 수정해야 할 것입니다.
    각각 값을 확인해봐야 할듯 하네요.

    this.hostname 대신
    jQuery(this).attr('href')를 쓰면 어떨까 합니다.
    그리고 !==가 아닌 문자열 찾기인 indexOf로 비교하면 어떨까 하구요.

  • @DoubleU
    if(this.hostname !== window.location.hostname) {

    이 부분을 아래처럼 바꾸면 어떨려나요?

    var url1 = jQuery(this).attr('href');
    if(url1.indexOf(window.location.hostname) != -1) {
  • @DoubleU

    잘 되지는 않네요. 외부링크인데 현재창으로 열리네요.

  • @DoubleU
    url1 을 고쳐야 하는건가요?
  • 정규식을 써야할 것 같은데요?

    도메인/abc 이런 것까지 제외하려면..
  • jQuery('.xe_content[class^=document_] a, .xe_content[class^=comment_] a').each(function() {
    var a = jQuery(this).attr('href');
    var b = /((https?:)?\/{2}(?!xetown)[\da-z\.-]+\.[a-z\.]{2,}[\w\/?&;=#%~\.-]*[\/]?)/g;
    if(b.test(a)) {
    $(this).attr('target', '_blank');
    }
    });

    일케 하면 될런지.. 중간에 xetown 만 바궈서 한번 해보세요

  • @파파즈
    외부링크인데 새창으로 나가요...
  • @웹지기
    내부 링크 말씀이시죠? 흠..

    if(b.test(a)) {
    $(this).attr('target', '_blank');
    } else {
    $(this).attr('target', '_self ')
    }

    이렇게 한번..
  • @파파즈
    앗.. 죄송 말을 잘못했습니다. 외부링크인데 현재창이요...
  • ----------- 그냥 처음 거 쓸게요... 도움 감사했습다. -------------

    jQuery(function(){ jQuery('.xe_content[class^=document_] a').attr('target', '_blank'); });
    jQuery(function(){ jQuery('.xe_content[class^=comment_] a').attr('target', '_blank'); });


    이거로 해도 본문에 저희 사이트 링크 적을때 _self 로 하면 새창으로 안뜨는 듯 합니다.

    새창으로 뜨지만.. ㅋㅋ

    많은 답변 감사했습니다.

  • <script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'></script>

    <script type='text/javascript'>
    $(document).ready(function() {
    $("a[href^='http://']").each(
    function(){
    if(this.href.indexOf(location.hostname) == 1) {
    $(this).attr('target', '_self');
    }
    }
    );
    $("a[href^='https://']").each(
    function(){
    if(this.href.indexOf(location.hostname) == 1) {
    $(this).attr('target', '_self');
    }
    }
    );
    });
    </script>

    될려나요.

  • @핑크두유

    이 스크립트를 board.js 에 그대로 넣으면 되나요?

     

    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'></script>  

    포함해서 스킨에 넣어야 하는건가요??

  • @웹지기
    제이쿼리는 혹시나 하고... 전 빼고 그냥 게시판 설정 상단 내용에 테스트로만 넣어봤어요 ㅎㅎ
  • @핑크두유
    저희 사이트가 클라우드플레어를 사용하는 사이트라 그런건지는 모르겠지만 잘 되시는 것도 저희쪽은 안되네요. 감사합니다.
  • @핑크두유
    스킨 _read.html 파일 하단에 넣어봤는데 저희는 안되네요.
  • 정 안되면 모든 링크에 Ctrl+클릭 생활화를... ㅎㅎ

  • @기진곰
    아니요. 저보다도 방문객들이 이탈해서 되돌아오기가 힘드니 신경이 쓰이는 부분이라서요. 뭐 정 안되면 이정도로 저희 사이트 링크도 새창으로 뜨는것을 감수해야 할 듯 합니다.
  • jQuery('.xe_content[class^=document_] a, .xe_content[class^=comment_] a').each(function() {
    var a = jQuery(this).attr('href');
    var b = /(사이트이름)/g;
    if(!b.test(a)) {
    jQuery(this).attr('target', '_blank');
    } else {
    jQuery(this).attr('target', '_self');
    }
    });

    이렇게 해보실래요? 상대경로가 들어간게 아니라면 되는 것 같긴한데..
  • @파파즈
    사이트이름이 도메인이죠? 밖에 나와서 좀 있다 해보겠습니다.
  • @웹지기
    네 xetown 이라면 xetown만요
  • @웹지기
    혹시 위 코드를 어디다가 달으셨나요..

    전 외부링크를 현재창으로 열리게 하고 싶어서..
  • @파파즈
    브라보~~!!

    완전 감사합니다. 정말 눈물이 주룩 날 정도입니다.
    잘되네요.... 너무 감사하게 잘 쓰겠습니다.
  • @웹지기
    오.. 잘되다니 다행입니다
  • @파파즈
    if문 대신에 제이쿼리로....대단합니다....^^
  • @파파즈
    이 코드를 애드온으로 만들어도 될까요?
  • @DoubleU
    그럼요!
  • @파파즈
    이걸 어디다가 달면 동작을 할 수 있을까요..
  • https://xetown.com/index.php?mid=xepoint&page=1&document_srl=219736

    @proto
    애드온 등록했습니다.
  • @DoubleU
    오.. 좋네요. 아이디어를 더 드리면.. 애드온이니까...
    설정에 문자열을 여러개(쉽표등으로 구분...) 넣을 수 있게 하면 자신의 사이트말고 특정한 사이트도 셀프로 띄울수도 있겠습니다만... 이게 필요하지는 않을 듯 합니다. 과연 어떤 다른 외부사이트를 셀프로 띄울 필요가 있을지... 효용성이 제로에 가까운 아이디어네요 ㅋㅋ
  • @웹지기
    저도 그 생각은 했는데요... 굳이 그럴 이유가 없다고 판단이 되어서요...
    어차피 강제로 모든 target을 바꾸는 것이라서요~
    작성자가 임의로 지정해놓은 target도 바꾸는 것이라...^^
  • @DoubleU
    네. 맞습니다. 근데 사용하고 싶은모듈 체크 후 저장이 안되네요 끙....
  • @웹지기
    애드온에 문제가 있나요??
    제 사이트에선 잘 되던데요....-0-
  • @DoubleU
    잘되긴 하는데 체크된 모듈이 표시가 되지 않는 문제가 있습니다.

    그러니까... 특정한 게시판에서만 사용하기 위해 체크한 곳이 작동은 하는데 어느곳에 체크되어 있는지 표시가 안됩니다.
    php파일에 공백이 있어 그문제인줄 알고 제거하고 업로드해도 마찬가지이네요.
  • @웹지기
    -0-;;;; 야매 제작자라서 잘 모르는 문제네요....-0-;;;;;
  • @DoubleU
    해결했습니다. 애드온방식이 버전별로 다른가 봅니다.

    <addon version="0.2"> 이렇게 고치니 표시되네요. 아마 뭔가 바뀐게 0.2 형식 인가봅니다.
  • @웹지기
    그건 기능과는 관계가 없이 그냥 제작자가 임의대로 버전 올리는 건데요..
    아무튼 해결되었다니 다행입니다...^^
  • @DoubleU
    아닌거 같습니다. 애드온의 형식이 버전별로 다를듯 합니다. 요즘 나오는 애드온들은 0.2로 모두 동일한듯 하고 애드온 자료의 버전은 따로 표시해서 1.0 .2.0 이런식으로 표시하는거 같아요.
  • @DoubleU
    최상단 <addon version="0.2">는 xe의 adddon 버전이므로 반드시 xe 와 맞추어 주어야하고
    제작자의 버전표시는 <version>1.7</version> 에 기입합니다.^^;
  • @휘즈

    허억!!!!!
    그렇군요!!!!!!!!!!!!!!!

    역시 제대로 공부하고 한 것이 아니라서... 가르침 감사합니다!

  • @DoubleU
    db에서 직접확인해보면 사용대상 모듈이 선택되어있는게 확인이 됩니다. 하지만 관리자페이지에서는 어떤 모듈들이 사용대상인지 보여주지 못합니다. 캐시파일 재생성 해보았고 다른 애드온은 이상 없음을 확인했어요.
  • @DoubleU
    와 제가 완전 원하던 기능인데 감사합니다.!!