24

どうして

$(function () {
  $(window).bind('popstate', function () {alert('pop');});

  window.history.pushState(null, '', '/foo');
});

警告しませんpopか?

注意: 最新のクロムでテスト中

--

MDNによると:

アクティブな履歴エントリが変更されるたびに、popstate イベントがウィンドウにディスパッチされます。アクティブ化されている履歴エントリが pushState の呼び出しによって作成されたか、replaceState の呼び出しによって影響を受けた場合、popstate イベントの状態プロパティには、履歴エントリの状態オブジェクトのコピーが含まれます。

では、なぜイベントpushStateをトリガーしないのですか?popstate

4

7 に答える 7

15

あなたが参照する段落は少しあいまいです。同じページの例を読むと、スクリプトが を呼び出したときではなく、ユーザーが戻るボタンをクリックしたときにのみ popstate がトリガーされることが明らかですpushState()

于 2012-06-08T10:41:08.097 に答える
-1

私もこれに遭遇しました...前の状態とは異なるデータオブジェクトの最上位に何かがある場合にのみ、イベントが発生すると思います。

これを試して:

var data = {rand: Math.random()};
window.history.pushState(data, '', '/foo');
于 2012-09-13T17:59:39.700 に答える
-1

ドキュメントhttps://developer.mozilla.org/en-US/docs/Web/Events/popstateは次のように述べています。

history.pushState()orを呼び出すだけでhistory.replaceState()は popstate イベントはトリガーされないことに注意してください。popstate イベントは、戻るボタンや進むボタンのクリック (または JavaScript での呼び出し) などのブラウザー アクションを実行することによってトリガーされhistory.back()ますhistory.forward()

于 2017-02-09T06:36:36.300 に答える