2012-08-22 1 views
3

beforeunload 이벤트를 유발 한 이벤트에 액세스하고 싶습니다. 특히, 다른 페이지로 연결되는 링크를 클릭하면 beforeunload 이벤트 핸들러에 링크가 무엇인지 알리고 싶습니다.beforeunload를 트리거 한 JavaScript href 이벤트에 액세스하는 방법

이렇게하면 URL이 무엇인지에 따라 beforeunload 이벤트 핸들러에서 다른 작업을 수행하게됩니다.

예 : 'http :'또는 'https :'는 사용자에게 저장되지 않은 변경 사항이 유실되었음을 경고합니다. 'mailto :'또는 'skype :'는 페이지가 실제로 언로드되지 않으므로 사용자에게 경고하지 않습니다. mailto link (in chrome) is triggering window.onbeforeunload - can i prevent this?

답변

14

난 당신이, event.originaltarget 등 event.target을 체크 아웃 할 때입니다 onbeforeunload 이벤트는 윈도우에 의해 촉발 된 것으로보고 있기 때문에 당신이 불가능하다고 말할 수있는 모든 준비를했다 그러나 window.onclick을 재정의하면 해당 메서드를 수정하여 페이지에서 마지막으로 클릭 한 요소를 등록 할 수 있습니다. 그런 다음 window.onbeforeunload에 대한 코드를 제공하여 마지막으로 클릭 한 요소의 href를 확인하는 새로운 비헤이비어를 지정할 수 있습니다. 만세, 맥주!

순수한 자바 스크립트에서 정확한 정보를 얻을 수있는 코드는 다음과 같습니다. 앵커 태그 내부에 추가 할 구멍이 없습니다. 또한 preventDefault()에 "이 페이지에서 나가기를 확인하라는 메시지가 나타납니다. 입력 한 데이터가 저장되지 않을 수도 있습니다."라는 메시지가 나타납니다. 확인 상자. 희망이 도움이 - 당신은 여기서 무엇을 해야할지 알아낼 수 있습니다.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>12065389</title> 
    <meta charset="utf-8"> 
    <script type="text/javascript"> 
     var last_clicked; 

     window.onclick = function(e) { 
      last_clicked = e.target; 
      return true; 
     } 

     window.onbeforeunload = function(e) { 
      var e = e || window.event; 
      if (last_clicked.href) { 
       alert(last_clicked.href); 
       e.preventDefault(); 
      } 
     } 
    </script> 
</head> 
<body> 
<a href="http://google.com">google</a> 
</body> 
</html> 
0

가 아마 오히려 beforeunload 이벤트보다, 페이지의 모든 링크에 이벤트를 첨부 할 것 :

나는이 같은 문제에 대한 좋은 해결책 구축을 위해 노력하고 있습니다.

뭔가 같은 :

$("a").click(function(evt) { 
    if($(this).attr('href').indexOf('http') == 0) { 
     if(confirm("Are you sure?")) { 
      //continue 
     } else { 
      evt.preventDefault(); 
     } 
    } 
}