2013-10-03 2 views
1

그래서 직장을위한 웹 포털을 만들고 있습니다. 보스는 페이지에서 다른 곳으로 이동하면 사용자를 로그 아웃하기를 원합니다. 이 자습서를 찾았습니다. http://kbeezie.com/cross-browser-exit-pop/자리 비움 스크립트가 작동하지 않음

jquery 예제를 사용하여 몇 개의 페이지에 삽입하여 테스트 해 보았습니다. 개발을 위해 asp.net/C#을 사용하고 있습니다. 다음 페이지의 기본 레이아웃 내 스크립트를 포함입니다 :

<%@ Page ... %> 
<asp:Content .. > </asp:Content> 
<asp:Content .. > 

    //my navigate away function 
    <script type="text/javascript"> 
     function PopIt() { 
     return "Are you sure you want to leave?"; 
     } 

     $(document).ready(function() { 
     window.onbeforeunload = PopIt; 
      $("a").click(function() { window.onbeforeunload = null; }); 
     }); 
    </script> 

    <div> 
     <table></table> 
     //other stuff 
    </div> 
</asp:Content> 

나는 우리의 웹 포털의 링크를 클릭하면 우리가 내부 링크를 클릭하고 있기 때문에 팝업하지 않는 스크립트가 작동 멀리 이동 . 그러나, 내가 사이트를 계속 돌아 다니면 2 ~ 3 번의 클릭 후 결국 내부 링크를 클릭하면 떠날 것인지를 묻습니다. 아무도 왜 이것이 일어나고 있는지 말해 줄 수 있습니까?

편집 : 모든 페이지에서 jquery가 참조되므로 문제는되지 않습니다.

편집 : 다음은 작동하는 JSFiddle입니다. 링크를 클릭하면 아무 일도 일어나지 않지만 탐색 할 때 아무 메시지가 나타나지 않습니다.

+1

내가 왜 당신이 설명하는 이슈를 얻고 있는지 확신 할 수는 없지만 포털을 떠나는 당신의 코드가 어떻게 반응하는지는 알 수 없습니다. * 모든 링크가 로컬인지 여부에 관계없이 onbeforeunload 핸들러를 제거합니다. – Archer

+0

Google 웹 사이트에는 외부 웹 사이트로 연결되는 링크가 없으므로이 솔루션은 모든 것을 포착하기 때문에 작동합니다 (Google로 이동, 브라우저 닫기 등) – ToastyMallows

+0

언로드를 트리거하는 링크는 마스터 페이지 컨텐츠 또는 다른 페이지 렌더링에서 렌더링되는 링크가 가정되지 않을 때 결국 발생합니다. – Casey

답변

0

그래서 1 주일 정도 지나면 내가 포기한 모든 것을 시도합니다. 며칠 후 내 동료 중 한 명이 우리가 상속 한 기본 클래스 중 하나에 OnPreInit을 실행하는 스크립트 차단 기능이 있다고 언급했습니다.

큰 코드베이스의 어딘가에서 내 OnBeforeUnload 기능을 무시한다고 의심했지만, OnBeforeUnload의 사용을 검색했을 때 나는 아무것도 발견하지 못했습니다. 스크립트 블로커 (script blocker)를 찾지 못했지만, 누군가가 말로 표현할 수없는 훌륭한 아이디어라고 생각했기 때문에!

스크립트 차단기를 재정의 한 후 원래 코드가 작동했습니다.

1

일부 링크가 생성되었으므로 onbeforeunload 처리기를 재정의하는 이벤트 처리기를 할당 할 때 페이지에 연결되지 않습니다. 이것을 시도하십시오 ...

<script type="text/javascript"> 
    function PopIt() { 
     return "Are you sure you want to leave?"; 
    } 

    $(document).ready(function() { 
     window.onbeforeunload = PopIt; 
     $("document").on("click", "a", function() { 
      window.onbeforeunload = null; 
     }); 
    }); 
</script> 

스크립트가 실행될 때 링크가 페이지에 있는지 여부에 관계없이 모든 링크 클릭을 캡처합니다.

+0

여전히 작동하지 않습니다. 나는 링크를 클릭 할 때 여전히 대화 상자를 얻는다. 틀린 장소에 스크립트 태그를 넣을 수 있습니까? 그 밖의 무엇이 잘못 될 수 있는지 모릅니다. – ToastyMallows

+0

페이지의 모든 'a' 태그를 처리해야합니다. 페이지에 링크가있는 iframe이 없습니까? 전체 페이지를 보지 않고서는 문제가 무엇인지 추측하기 어렵습니다. – Archer

+0

그래, 나는 내가 이것을 게시하기 시작할 때 내가 걱정하고 있었던 것을 알고있다. 페이지에 프레임이 없습니다. 나는 ASP.Net이 무언가를 엉망으로 만들 것이라고 90 % 정도 확신한다. – ToastyMallows

관련 문제