2014-09-04 3 views
0

나는 은행 웹 사이트에서 다음 코드를 사용하여 사용자가 웹 사이트를 떠난다는 경고를 보냅니다.자바 스크립트 팝업 경고 메시지의 특정 URL 제외

$('a').filter(function() { 
      return this.hostname && this.hostname !== location.hostname; 
      }) 
      .click(function() { 
      return window.confirm('Warning message here...'); 
      }); 
}); 

현재 온라인 뱅킹 로그인을 클릭하면 팝업 창이 나타납니다. 온라인 뱅킹 웹 사이트를 제외 할 수 있도록 웹 사이트의 도메인 이름에 포함되지 않은 특정 URL을 제외시킬 수 있어야하지만 어떻게해야하는지 잘 모릅니다.

도움을 주시면 감사하겠습니다.

답변

1
$('body').on('click', 'a', function(e){ 
    if(this.hostname != 'mydomain.com' && this.hostname != 'www.mydomain.com'){ 
    if(!confirm('This is an external link. Are you sure you want to leave?')){ 
     e.preventDefault(); 
    } 
    } 
}); 

여기서는 event delegation을 사용하여 모든 링크 (삽입 된 링크 포함)를 캡처했는지 확인했습니다. 하위 도메인이있는 경우 다중 도메인 조건을 추가 할 수 있습니다 (예 : www.mydomain.com).

+0

그래서 나는 mydomain.com 위에 표시되는 웹 사이트의 도메인 이름을 넣을 것인가? 자바 스크립트에 다른 도메인을 추가하는 방법을 보여줄 수 있습니까? 감사. – Lonnie

+0

@Lonnie 맞습니다. 도메인에 맞게 바꾸십시오. 여러 도메인을 표시하도록 코드를 업데이트했습니다. – Ryan

+0

원본 스크립트를이 스크립트로 대체하고 두 도메인을 추가했으나 작동하지 않습니다. 팝업은 외부 링크에 전혀 표시되지 않습니다. – Lonnie

0

외부 링크뿐만 아니라 자신의 도메인의 특정 경로를 차단할 수있는 Ryan의 답변이 개선되었습니다.

호스트와 경로를 별도로 확인하므로 자신의 도메인이 아닌 모든 링크와 사용자 도메인의 특정 경로를 차단할 수 있습니다.

사용자가 차단 된 링크를 클릭하면 "request_confirmation"기능은 현재 페이지에서 탐색을 허용하기 전에 사용자에게 확인을 요청합니다.

논리를 여러 함수로 나눠서 쉽게 수정할 수 있습니다. 여기

$('body').on('click', 'a', function(e){ 
    return (should_link_be_blocked($(this).attr('href')))? request_confirmation() : true; 
}); 

function should_link_be_blocked(link){ 
    var url = new URL(link); 

    return should_host_be_blocked(url.hostname) || should_path_be_blocked(url.pathname); 
} 

    function should_host_be_blocked(host){ 
    return !(host.match(/([a-z0-9]+\.)?example.com/)); 
    } 

    function should_path_be_blocked(path){ 
    var not_allowed = ['/block_me.html', '/block_another.html']; 
    var block = false; 

    not_allowed.forEach(function(n_a){ 
     block = (path == n_a)? true : block; 
    }); 

    return block; 
    } 

function request_confirmation(){ 
    return confirm('This is an external link. Are you sure you want to leave?'); 
} 

그것의 추한 예는 노력하고 있습니다 : http://codepen.io/anon/pen/Gjagi

+0

불행히도이 예는 Chrome에서 작동하지만 사파리에서는 팝업 창이 작동하지 않습니다. 사파리에서도 맥에서 작동시켜야 해. – Lonnie