2012-01-05 7 views

答えて

3

このdiscussion on githubによると、それは期待の行動は、W3C仕様でより多くのインラインようにhistory.jsを変更したします。

+0

百万のおかげです。私は個人的にhistory.js解決策が良いと感じます。 – aWebDeveloper

12

追加したいと思います。はい、これはHistory.jsの予想される動作です。 同時に、more discussionsがあります.W3C標準ではないので、この動作を批判し、混乱を招きます。

要するに、あなたの質問に答えるには: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 
    } 
}); 
関連する問題