2012-03-10 7 views
0

ajax 탐색 기능이있는 Webapp를 사용하면 html5의 내역 탐색 기능을 활용할 수 있습니다.html5 히스토리 탐색 : popstate가 트리거되지 않음 excep on page로드

그러나 popstate 이벤트에 바인딩하면 트리거되지 않습니다. 가능한 HTML5 경우

(제대로 감지, 데모는 FF로 크롬에서 잘 작동 않음) :

// Callback 
function historyChangeHandler(data) { 
    console.log(data); 
} 

// Bind 
$(window).bind('popstate', historyChangeHandler); 


// Trigger 
$("a").click(function(e) { 
    var url = "/"; 
    // ... 
    console.log("clicked"); 
    history.pushState({url: url}, "", url); 
    return false; 
}); 

무엇을 작동하지 않습니다

    그것이 페이지로드에 Excep
  • popstate 콜백 historyChangeHandler()는 링크를 클릭 할 때 호출되지 않습니다. 즉, clicked는 인쇄되지만 이벤트는 인쇄되지 않습니다. 내가 뭘하려

:

  • 연기의 setTimeout와 pushState 호출.
  • e.preventDefault(); 및
  • 은 또한 DIV-S에 부착 반환 진실 대신 거짓을 반환 작업 무엇

사실 :

  • historyChangeHandler는() 페이지로드라고합니다.
  • historyChangeHandler()는 뒤로 버튼을 누를 때 호출됩니다.
  • historyChangeHandler()는 앞으로 버튼을 누를 때 호출됩니다.
  • 콘솔에서 history.pushState ({url : "/ test"}, "", "/ test")를 호출하는 경우 historyChangeHandler()!

실마리가 있습니까?

답변

1

왜 popstate 이벤트를 실행해야합니까? 왜 당신의 기능을 부르지 않습니까?

$("a").click(function(e) { 
    var url = "/"; 
    // ... 
    console.log("clicked"); 
    history.pushState({url: url}, "", url); 
    historyChangeHandler({url: url}); 
    return false; 
}); 
2

popstate은 링크를 클릭 할 때 호출되지 않아야합니다. 사용자가 뒤로/앞으로 버튼으로 이동할 때 호출됩니다.

모든 것이 정상적으로 작동합니다.

+0

코드를 보려면 pushState가 링크를 클릭 할 때 호출됩니다. '그 이유는 무엇입니까?' – sibidiba

+2

pushState를 호출하면 popState가 즉시 트리거 될 것으로 예상합니까? 그건 말이 안돼. 관계없이 당신이 무엇을 기대하고, 당신이 대답을 좋아하든 그렇지 않든간에, 그것은 여전히 ​​예상대로 작동합니다. –