2008-09-26 5 views
4

사용자가 웹 브라우저에서 탭을 닫았는지 알 수있는 방법이 있습니까? 특히 IE7뿐만 아니라 파이어 폭스 및 기타도 있습니다. 웹 사이트를 포함하는 현재 탭이 닫히면 ASP 코드에서이 상황을 처리 할 수 ​​있기를 원합니다.웹 브라우저에서 탭 닫기 이벤트 잡기?

답변

2

"onbeforeunload"이벤트를 첨부하십시오. 브라우저/탭이 닫기 직전에 코드를 실행할 수 있습니다.

+0

감사합니다. 나는이 세부 사항을 우리 ASP 개발자에게 넘겨 주며 그녀의 발견에 따라 답변에 투표 할 것입니다. –

+1

onbeforeunload는 Opera에서 작동하지 않습니다. onunload는 Opera에서 작동하지만, 예를 들어 링크를 클릭하여 페이지에서 벗어날 때만 작동합니다. 탭을 닫거나 페이지를 새로 고침하면 onunload가 Opera에서 실행되지 않습니다. – Shadow2531

+0

onbeforeunload 이벤트를 사용하기 전에 무엇이 필요한지 이해하십시오. Santosh의 답변과 제 대답을 읽어보십시오.Eran이 제안한 것과 같은 onbeforeunload 이벤트를 첨부하면 예상보다 많은 시간이이 이벤트가 트리거되는 것을 볼 수 있기 때문에 많은 시간을 절약 할 수 있습니다. – ThdK

1

당신이 있다면 document.unload하지 않습니까?

+0

document.unload 클라이언트 측이며, 어쩌면 문서 언로드 이벤트 처리기에서 AJAX 요청을 해고하겠습니까? – kristian

+0

비동기 호출이 작동합니까? 내 말은 ... 탭이 죽임을 당했다는 것입니다. 동기가되어 어떤 식 으로든 잠그는 것이 좋습니다. –

+0

페이지가 응답을 신경 쓰지 않기 때문에 동기 요청을 필요로하지 않습니다 (실제로 응답이 반환 될 때까지 닫힐 것입니다). – kristian

0

페이지가 서버 쪽에서 닫힐 때를 알아야 할 경우 가장 좋은 방법은 페이지에서 주기적으로 서버에 핑하는 것입니다 (예 : XMLHttpRequest 통해). ping이 중지되면 페이지가 닫힙니다. 브라우저가 충돌하거나 종료되거나 컴퓨터가 꺼진 경우에도 작동합니다.

0

Eran Galperin이 제안했듯이 onbeforeunload을 사용하십시오. 특히 문자열을 반환하면 해당 문자열이 확인 대화 상자에 포함되어 사용자가 페이지를 떠날 지 여부를 선택할 수 있습니다. 각 브라우저에는 반환하는 문자열 앞뒤에 텍스트가 포함되어 있으므로 다른 브라우저에서 테스트하여 사용자에게 표시되는 내용을 확인해야합니다.

6

onbeforeunload -

* Close the current browser window. 
* Navigate to another location by entering a new address or selecting a Favorite. 
* Click the Back, Forward, Refresh, or Home button. 
* Click an anchor that refers the browser to another Web page. 
* Invoke the anchor.click method. 
* Invoke the document.write method. 
* Invoke the document.open method. 
* Invoke the document.close method. 
* Invoke the window.close method. 
* Invoke the window.open method, providing the possible value _self for the window name. 
* Invoke the window.navigate or NavigateAndFind method. 
* Invoke the location.replace method. 
* Invoke the location.reload method. 
* Specify a new value for the location.href property. 
* Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method. 

그래서, 당신은 그들이 탭 또는 브라우저 창을 닫을 경우 사용자가 로그 아웃하려는 경우, 당신은 매번 그들을 로그 아웃 끝날 것입니다 그들은 링크를 클릭하거나 페이지를 제출하십시오.

0

Santosh가 맞습니다.이 이벤트는 탭/브라우저의 닫기 버튼을 누르는 것보다 더 많은 작업에서 트리거됩니다. 나는 문서 준비에 다음 함수를 추가하여 onbeforeunload 작업을 트리거하지 못하도록 약간의 해킹을 만들었습니다. 당신이 원하지 않는 경우

window.onbeforeunload = null; 

이벤트가 트리거 될 : 또한

 $(function() {  
     window.onbeforeunload = OnBeforeUnload; 
      $(window).data('beforeunload', window.onbeforeunload); 
      $('body').delegate('a', 'hover', function (event) { 
       if (event.type === 'mouseenter' || event.type === "mouseover") 
        window.onbeforeunload = null; 
       else 
        window.onbeforeunload = $(window).data('beforeunload'); 
      }); 
     }); 

, 당신은 산토 언급 이벤트 중 하나를 트리거하기 전에, 당신이 줄을 실행해야합니다.

그리고 여기에 최종 코드 조각 : 당신이 한 단계 더 가야 할 것 (당신의 ASP 코드에서) 그것을 서버 측을 처리 할 수 ​​있도록

function OnBeforeUnload(oEvent) { 
      // return a string to show the warning message (not every browser will use this string in the dialog) 
      // or run the code you need when the user closes your page 
     return "Are you sure you want to close this window?";  
    }