2013-11-26 2 views
1

Google에서이 포럼의 다른 질문을 검색했지만 내 질문에 답변되지 않은 것 같습니다. onhashchange와 같은 기능을 가진 javascript onpopstate 대안

는 MDN https://developer.mozilla.org/en-US/docs/Web/API/window.onpopstate 기준 자료 : 단지 history.pushState() 또는 history.replaceState()를 호출

참고가 popstate 이벤트를 트리거하지 않습니다. popstate 이벤트는 뒤로 버튼을 클릭하거나 JavaScript에서 history.back()을 호출하는 등의 브라우저 동작을 수행해야 트리거됩니다. 사용자가 동일한 문서에 대한 두 개의 기록 항목 사이를 탐색 할 때만 이벤트가 트리거됩니다.

임 가지고 onpopstate 대안을 찾고 같은 기능 window.onhashchange과 URL이 변경 될 때 이벤트가 발생합니다 (https://developer.mozilla.org/en-US/docs/Web/API/Window.onhashchange).

솔루션을 공유 하시겠습니까?

답변

1

"History.js"도구를 사용하면 "statechange"이벤트를 수신 할 수 있다고 생각합니다. 도구는 앞으로/뒤로 단추를 누를 때나 pushState/replaceState를 사용할 때 이벤트를 발생시킵니다. 물론

https://github.com/browserstate/history.js/

은, 지금 당신은 당신이 이벤트는 행동의 두 가지 유형의 해고되고 있고, 당신이 종종 구별 할 그 더 어려운 것입니다 다른 문제에 대한 거래했습니다. 그래서 당신은 그것들을 구별하기 위해 당신 자신의 솔루션을 해킹해야합니다. 대부분의 사람들은 pushState/replaceState를 호출 할 때마다 일부 전역 플래그를 설정 한 다음 이벤트 처리기에서이 플래그를 확인합니다. 플래그가 설정되면 이벤트는 사용자 코드에서 발생하고, 그렇지 않으면 브라우저 버튼에서 이벤트가 발생합니다.

+0

여기 방문한 mr @ kyle-simpson 고맙습니다. 간단한 일을하기 위해 외부 라이브러리를 사용하지 않겠습니다. 하지만 내 솔루션을 해킹해야합니다. pushState의 자체 버전을 만듭니다. 그런 다음,'onpopstate'와 내 자신의 pushState에 의해 호출 될 라우터 함수를 생성하십시오 – plainjavascript

관련 문제