2013-04-10 3 views
17

몇 줄의 코드가있는 JavaScript/jQuery 함수를 호출해야합니다. 사용자가 창/탭을 닫거나 링크를 클릭하여 탐색 할 때 PHP 페이지에서 호출해야합니다. onbeforeunload 함수를 시도했지만 return "blah blah blah;" 부분 만 실행하고 나머지는 무시됩니다. 또한 jQuery에서 .unload 메서드를 시도했지만 어떤 이유로이 코드가 실행되지 않습니다.사용자가 멀리 이동할 때 이벤트 트리거

$(window).unload(function() { 
    alert('blah blah blah'); 
}); 

대안을 제안하십시오. 감사합니다 ...

+1

언로드 할 때 무엇을하고 싶습니까? – writeToBhuwan

+1

세션 변수를 설정 해제하려면 PHP로 Ajax 호출을해야합니다. –

+0

'링크를 클릭하여 이동합니다'이것은 문서에 언로드 할 것을 보여줍니다. – muneebShabbir

답변

13

다음은 간단한 작업 예제입니다. 뭐든간에 unload 콜백에서 return 콜백이 브라우저 팝업 확인에 표시됩니다. jQuery를에

window.onbeforeunload = function(event) { 
    // do stuff here 
    return "you have unsaved changes. Are you sure you want to navigate away?"; 
}; 

: 다음의 네트워크 탭에

$(window).on("beforeunload", function() { 
    $.ajax("someURL", { 
     async: false, 
     data: "test", 
     success: function(event) { 
      console.log("Ajax request executed"); 
     } 
    }); 
    return "This is a jQuery version"; 
}); 

작업을 예를 보내는 Ajax 요청 전에이 작업을 수행하는 http://jsfiddle.net/alexflav23/hujQs/7/

가장 쉬운 방법은 언로드 브라우저. 원하는대로 요청을 보내는 방법을 볼 수 있습니다. 적절한 데이터를 보내십시오.

트리거 된 모든 작업은 동기식이어야하므로 인스턴스에 대해서만 동기식 아약스 요청 만 할 수 있습니다. 그러나 위의 내용은 어떤 목적으로도 완전히 신뢰할 수있는 것은 아닙니다.

주기적으로 사용자 데이터를 localStorage으로 백업하고 서버와 자동으로 동기화하도록 선택하십시오. window.onbeforeunload을 주 예방책으로 만 사용하고 주 메커니즘으로 사용하지 마십시오. 문제를 일으키는 것으로 잘 알려져 있습니다.

+0

이것은 작동하지 않습니다. beforeunload는 사용자가 경고를 확인하는지 여부에 관계없이 항상 호출됩니다. 일부 정리를 실행해야하지만 사용자가 실제로 내비게이션을 수행하는 경우에만 정리를 실행하고 싶습니다. 어떻게해야합니까? –

+0

@JohnHenckel 그렇게 할 방법이 없습니다. – apscience

+1

@apscience, thanks. 브라우저 사양에 결함이있는 것 같습니다. 예를 들어 데이터베이스의 행을 편집 할 웹 페이지를 만들고 다른 사용자가 변경하지 못하도록 행을 잠급니다. 내가 찾은 유일한 해결책은 몇 초마다 서버에 하트 비트를 보내 서버가 언제 잠금 해제 할지를 알 수 있도록하는 것입니다. 그러나 사용자가 여전히 편집 중이더라도 "확인"상자가 열려있는 동안 JS 엔진이 일시 중지되므로 하트 비트가 중지되므로 심각한 결함이 있습니다! 어쩌면 언젠가 브라우저가 OS를 대체 ​​할 것이지만, 지금은 애플리케이션 플랫폼을 짜증나게 할 것입니다! –

관련 문제