私はhistory.jsを使用して戻るボタンを処理しています。私がpushstateを行うたびに、history.jsの状態変更が発生しています。どうして? history.jsプッシュ状態を実行するたびにStatechangeが起動します
このpull request請求の
私はhistory.jsを使用して戻るボタンを処理しています。私がpushstateを行うたびに、history.jsの状態変更が発生しています。どうして? history.jsプッシュ状態を実行するたびにStatechangeが起動します
このpull request請求の
このdiscussion on githubによると、それは期待の行動は、W3C仕様でより多くのインラインようにhistory.jsを変更したします。
追加したいと思います。はい、これは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」バージョンでのみ使用することができます!これは将来的には、いくつかの他の人々を助けることを願っています:)
今日のためにこれを達成しようとした後、私は最終的にここに解決策を見つけた: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
}
});
百万のおかげです。私は個人的にhistory.js解決策が良いと感じます。 – aWebDeveloper