history.js를 사용하여 뒤로 버튼을 처리하고 있습니다. history.js에서 나는 pushstate 할 때마다 statechange가 실행됩니다. 왜? history.js푸시 상태 일 때마다 Statechange가 실행됩니다.
이 pull request 주장
history.js를 사용하여 뒤로 버튼을 처리하고 있습니다. history.js에서 나는 pushstate 할 때마다 statechange가 실행됩니다. 왜? history.js푸시 상태 일 때마다 Statechange가 실행됩니다.
이 pull request 주장
이 discussion on github에 따르면, 예상의 행동은 W3C 사양에 더 인라인으로 history.js를 수정합니다.
추가하고 싶습니다. 네, 이것은 History.js의 예상되는 동작입니다. 동시에 W3C 표준이 아니기 때문에이 동작을 비판하는 more discussions이 있으며 혼동이 생깁니다.
요약하면 질문에 대한 답변 : History.js에서 pushState()
함수는 statechange에 대한 호출입니다.
이 솔루션의 Upside은 새로운 상태를 변경 (푸시)하고 onstatechange() - 함수가 전환을 처리하도록 할 수 있다는 것입니다. 아래쪽은 예외를 처리 할 수 없거나이를 onstatechange 이벤트 처리기에 기록해야한다는 것입니다.
전/후 단추와 pushState를 구별 할 수 있으므로 개인적으로 W3C 처리 방법을 선호합니다. 위의 호출 [pushstate-통화] 트리거하여 stateChange 이벤트가 어떤 이유로하지 않으려면 어떻게
주의 사항 : 할 수 있습니다 테이너 내부 플래그 솔루션 작업중인 History.js는이 동작을 변경하려면 이것은 다음과 같은 사용 할 수 stateChange 오브젝트 핸들러 내에서 다음 일이 :
if (History.getState().internal) { return; }
*이 기능은 현재 개발하고 History.js의 'DEV'버전에서만 사용할 수 있습니다! 이 지금은 하루 동안이 작업을 수행하려고하면 미래 :
에서 다른 사람을 도움이 될 것입니다 희망, 나는 마침내 여기에 해결책을 발견 : https://github.com/browserstate/history.js/issues/47#issuecomment-25750285
을 코드는이 인용되는 다음, 굉장히 간단합니다 링크 :
당신은
History.pushState({
_index: History.getCurrentIndex(),
someData: ...
}, someTitle, someUrl);
다음 바인딩 이벤트에 상태를 누르면
History.Adapter.bind(window, 'statechange', function() {
var currentIndex = History.getCurrentIndex();
var internal = (History.getState().data._index == (currentIndex - 1));
if (!internal) {
// your action
}
});
백만 감사드립니다. 개인적으로 역사를 느낍니다 .js 솔루션이 더 좋습니다. – aWebDeveloper