2012-01-05 3 views

답변

3

discussion on github에 따르면, 예상의 행동은 W3C 사양에 더 인라인으로 history.js를 수정합니다.

+0

백만 감사드립니다. 개인적으로 역사를 느낍니다 .js 솔루션이 더 좋습니다. – aWebDeveloper

12

추가하고 싶습니다. 네, 이것은 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'버전에서만 사용할 수 있습니다! 이 지금은 하루 동안이 작업을 수행하려고하면 미래 :

9

에서 다른 사람을 도움이 될 것입니다 희망, 나는 마침내 여기에 해결책을 발견 : 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 
    } 
}); 
관련 문제