2012-05-15 2 views
2

브라우저를 닫을 때 몇 가지 기능을 구현했습니다. 내가 주소창을 클릭하여 입력하거나 키를 누릅니다 이제까지 내가 새로 고침 버튼으로 페이지를 새로 고침 할 때 Java Script On IE8의 창 닫기

window.onbeforeunload = function (evt) { 

    evt = (evt)? evt:event; 
    clickY = evt.clientY; 
    altKey = evt.altKey; 
    keyCode = evt.keyCode; 

if (altKey == true && keyCode == 0){ 
      //Make call to the server to clear the cache     
    }else if(clickY < 0){ 
    //Make a call to the server to clear the cache 
    }else { 
     return; 
    }    
}; 

이제 위의 코드에서 문제는 내 코드는 내가 있기 때문에 원하지 않는 ("21112") 나 경고를주는 것입니다 통화는 브라우저가 닫힌 경우에만 트리거됩니다. 그래서 누군가가이 일을 성취하도록 도와 줄 수 있습니다.

+0

다음 키를 입력하고 F5 키를 확인하십시오 ... – gdoron

+2

당신은 할 수 없습니다 - 현재 페이지를 탐색 할 때 이벤트가 시작됩니다 - 이것은 다른 페이지 나 브라우저가 닫히는 것을 의미합니다 – ManseUK

+0

@goudon 그것은 항상 키 코드를 제공합니다. – BOSS

답변

7

window.onbeforeunload 이벤트가 호출되기 전에 페이지가 unload ed입니다. 새로 고침 또는 브라우저 창 닫기 이벤트인지 확인할 방법이 없습니다.

  • 닫기 현재 창 :

    그것은 다른 시나리오 MSDN에 의해 발생합니다.

  • 새 주소를 입력하거나 즐겨 찾기를 선택하여 다른 위치로 이동하십시오.
  • 다른 문서를 참조하는 앵커를 클릭하십시오.
  • anchor.click 메서드를 호출하십시오.
  • document.write 메서드를 호출하십시오.
  • document.close 메서드를 호출하십시오.
  • window.close 메서드를 호출하십시오.
  • window.navigate 또는 NavigateAndFind 메서드를 호출하십시오.
  • location.replace 메서드를 호출하십시오.
  • location.reload 메서드를 호출하십시오.
  • location.href 속성에 대해 새 값을 지정하십시오.
  • INPUT type=submit 컨트롤을 통해 ACTION 특성에 지정된 주소로 양식을 제출하거나 form.submit 메서드를 호출하십시오.
  • window.open 메서드를 호출하여 창 이름에 가능한 값 _self을 제공합니다.
  • document.open 메서드를 호출하십시오.
  • 뒤로, 앞으로, 새로 고침 또는 홈 버튼을 클릭하십시오.

그리고 처리 할 수 ​​없습니다.

또한 window.onbeforeunload 이벤트가 그가 확인 팝업에 포함됩니다 return 문자열 값 (Firefox 4+를 제외하고는 bug 참조)해야 페이지와 핸들러 기능을 잎 사용자에게 통보하기로되어 있습니다.

사용자가 페이지에 계속 머물 수 없습니다.

참고 : onbeforeunload로 할 수있는 있는 유일한 방법은 그가 당신의 페이지 을 (떠나는 사용자에게 통보하는 것입니다이 때문에 일부 등 다른 페이지와를 열 수있는 페이지 ... 스팸 사용자 이것은 보안 제한 사항입니다.)

윈도우가 언로드되기 전에 AJAX 호출을하려면, onunload 이벤트를 사용해야합니다. 귀하의 AJAX 통화는 synchronus이어야합니다. 비동기 호출이 작동하지 않습니다.

0

this의 녀석은 onbeforeunload 이벤트를 기반으로 한 접근 방식이 IE에서 작동한다고 말합니다.

이럴 그러나, 당신이 원하는 것을 할 수있는 최선 (크로스 플랫폼) 기회의 마지막 사용자 동작 이후 지난 한 시간을 확인하고 그에 따라 캐시를 지우려면를 셋업 Ajax polling request (here is a nice demo)이다.

0

나는이 동일한 문제를 잠시 동안 일 했으므로 내가 발견 한 것을 설명해 드리겠습니다.

1) window.onbeforeunload 이벤트는 각 브라우저에서 조금 다르게 처리됩니다. 사용자가 페이지에 머물기를 원할지라도 이벤트가 발생하자마자 세션이 사라지는 것을 보았습니다.

2) 웹 응용 프로그램에는 사용자가 브라우저를 닫거나 페이지에서 벗어나는 것을 막을 수있는 힘이 없습니다 (명백한 이유로). 서버 측 훅을 구현하여 필요한 정리를 호출 할 수있었습니다 (브라우저를 가로 챌 때와 같은 종류의) 사용자를 유도하는 것을 귀찮게하지 않았습니다.

창을 닫기 전에 사용자에게 메시지를 표시해야하는 경우 그들이 새로운 URL을 입력 할 때도 마찬가지입니다. 그들은 동일하고