2014-10-31 3 views
0

사용자가 브라우저 창을 닫을 때만 팝업을 표시하려고합니다. 하지만, 다음 코드에서. 페이지를 새로 고침하면 팝업이 표시됩니다.새로 고침시 팝업을 피하십시오. 사용자가 브라우저 창을 닫을 때만 표시합니다.

내 코드

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var key = true; 
     $(window).bind('beforeunload', function(e){ 
      if(key) 
      return confirm("Do you really want to close? This will log you out of your profile."); 
     e.preventDefault() 
     }); 
     $(document).on("click","a",function() { 
      key=false; 
     });  
    }); 
</script> 
+0

'대답 해주세요. '답변을 얻는 것이 실제로 적절한 방법은 아닙니다. – artm

답변

1

이것은 당신이 필요 본질적이다.

출처 : open a custom popup on browser window/tab close

JSFiddle : http://jsfiddle.net/SQAmG/5/

var popit = true; 
window.onbeforeunload = function() { 
    if(popit == true) { 
      popit = false; 
      return "Are you sure you want to leave?"; 
    } 
} 

편집

사용 HTML5 웹 저장소는 브라우저 내에서 세션을 시뮬레이션합니다. 여기서 브라우저를 완전히 닫을 때 세션이 끝나기 위해 localStorage 대신 sessionStorage를 사용하려고합니다.

sessionStorage 변수가 설정된 경우 팝업을 시작하지 마십시오. 그렇지 않으면 팝업 코드를 허용하십시오.

HTML5 웹 스토리지 : http://www.w3schools.com/html/html5_webstorage.asp 당신이 onbeforeunload 콜백을 설정하면

+0

창을 새로 고침하면 팝업이 표시됩니다. – user3909863

+0

창을 새로 고침하면 페이지를 "떠납니다"때문입니다. 그러나 그로 인해 필자는 JavaScript를위한 "세션"인 로컬 저장소를 기억하게되었습니다. http://www.w3schools.com/html/html5_webstorage.asp 해당 브라우저 세션에 로컬 저장소를 사용할 수 있으며 사용자에게 해당 저장소를 추가 할 수 있습니다 이미 페이지에 있었고 로컬 저장소의 세션 변수가 아직 설정되지 않은 경우에만 코드를 실행합니다. – Paul

+0

@Paul HTML5를 지원하지 않는 이전 브라우저를 사용하면 어떻게 될까요? –

1

, 그것은 당신이 탭을 닫거나 페이지를 새로 고침 여부를 때마다 실행됩니다. 그래서, 여기에 해킹 할 수 있습니다. 탭을 닫으면 창이 사라집니다. 그래서 onbeforeunload 안에 창에 포커스가 있는지 확인합니다. 있다면, 당신은 페이지를 새로 고칩니다. 초점이 맞지 않으면 탭을 닫았을 것입니다.

window.onbeforeunload=function(){ 
    if(!document.hasfocus()){ 
     //show popup 
    } 
} 
관련 문제