14

'popstate'イベントハンドラーに問題があります。これが私のコードです。

window.addEventListener("popstate", function (event){
    if (event.state) {
        alert('abc')
    }
});

// The data object is arbitrary and is passed with the popstate event.
var dataObject = {
    createdAt: '2011-10-10',
    author: 'donnamoss'
};

var url = '/posts/new-url';
history.pushState(dataObject, document.title, url);

このコードが実行されるとアラートボックスがポップアップすることを期待していましたが、何も起こりません。

ここに何か問題がありますか?

ありがとうございました。

4

3 に答える 3

25

pushStateイベントをトリガーしないでください。popstate戻る/進むボタンをクリックする(またはバックスペースを使用する)か、history.back()/を呼び出すだけでhistory.go(n)このイベントがトリガーされます。

また、Webkitブラウザーでは、popstateページのonloadイベントの後にイベントがトリガーされますが、FirefoxとIEにはこの動作はありません。

于 2013-01-04T03:42:56.523 に答える
6

いいえ、それはしません、

MDNドキュメントによる

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

繰り返しますが、この質問のとおり、を呼び出してもpopstateイベントはトリガーされません。ChromepushState()

于 2013-01-04T03:44:07.537 に答える
0

history.pushState()popstate定義上、イベントはトリガーされません。

popstateイベントは、セッション履歴エントリに移動するときに発生する場合があります。

このイベントは、戻る/進むボタンを押すか、またはを押して履歴エントリに移動したときにのみトリガーされることを目的としていますhistory.go/back

于 2013-01-04T05:28:13.343 に答える