46

Stack Overflow でいくつかの質問/回答を読み、問題を Google で検索しましevent.statenull

jQueryイベントでは機能しないことがわかりましたが、次のようなことをすると:

window.onpopstate = function (e) {
     console.log(e.state)
}

jQuery.ajax の成功呼び出しに沿った何かを使用して

history.pushState({ lastUrl: data.State }, data.Title, data.UrlKey);

Chrome (v19) も Firefox (v12) も null 以外を返しますか? 何か不足していますか?完全に実装されていないだけですか?

4

7 に答える 7

63

e.stateプッシュされた最後から2番目の状態を指します。e.state状態にならないようにするには、状態を少なくとも2回プッシュする必要がありますnull。これは、サイトが最初に読み込まれたとき、およびその後は状態が変わるたびに、状態を保存する必要があるためです。

于 2012-08-07T10:55:36.810 に答える
16

他の回答の「最後から2番目にプッシュされた状態」という文が混乱を招く可能性があるため、この質問にはより明確な説明が必要だと思います。

history.pushState を実行すると、履歴スタックに新しい State がプッシュされ、それが現在の State になります (ナビゲーション バーの URL からわかるように)。

window.onpopstate イベントは、最上位の履歴状態がポップアウトされる (スタックから取り除かれる) ことを意味するため、e.state はスタック内の新しい新しい最上位の状態を指すようになります (ナビゲーション バーが前の状態を指すように) url)。

于 2015-11-03T18:48:04.277 に答える
1

history.stateは現在のページに関連付けられているため、forwardおよびが可能backです。最初の履歴の状態を取得するには、最初の履歴の状態に配置するために使用できますhistory.replaceState

window.history.replaceState(currentState, document.title)
于 2021-08-09T13:06:50.603 に答える