シングルページアプリケーションでは、ナビゲート時にURLを更新し、新しいURLに基づいて再レンダリングするのが一般的です。これは、ユーザーが 戻るボタンと進むボタンを押す 、アンカータグをクリックする、または 履歴オブジェクトに新しい状態をプッシュする の場合に発生する可能性があります。
あらゆる種類のURL変更を検出するためのコンセンサスは、ミリ秒ごとにpollになります。 これは、ユーザーはEventListenerをpopstate
とhashchange
に追加できますが、それでもpushstate
を聞くことはできません。
onpopstateイベント が存在する場合(戻るボタンと進むボタンでナビゲートするために使用されます)、なぜonpushstateが存在しないのですか?イベントは存在しますか?
onpopstate
が長い間存在していて、作品にonpushstate
の証拠がない場合、それは意識的な決定だったと思います。それを追加すると、悪いプログラミングやパターンが強制されるということですか?
理由は次のとおりです。
通常の状況では、ページAから開始し、ページBにプッシュ状態で更新し、Aに戻った場合、ドキュメントは変更されません。更新Bから取得したドキュメントはポップステートになります。ただし、Bを更新したときに400以上の応答コードが表示された場合は、別のドキュメントと見なされます。 Bの更新がたとえば404を返した場合、戻ったときに実際にAのドキュメントをロードします。
Aにいる場合、状態をBにプッシュ/置換してからCに移動すると(document.locationを設定したり、リンクをクリックしたりするなどして)、HTTPリファラーとしてBを送信します。ただし、Aにいる場合は、Bに移動し、Cにプッシュ状態、Dにプッシュ状態、次にDを更新します。プッシュ状態は実際にはナビゲーションではないため、HTTPリファラーとしてBを送信します。
参照