で遊んでいwindow.onpopstate
ますが、少し気になることがあります。
ブラウザーは、ページの読み込み時に popstate イベントを異なる方法で処理する傾向があります。Chrome と Safari は、ページの読み込み時に常に popstate イベントを発行しますが、Firefox は発行しません。
私はそれをテストしましたが、Chrome と Safari 5.1 以降ではページの読み込み時に popstate イベントが発生しましたが、Firefox や IE10 では発生しませんでした。
問題は、ユーザーが戻るボタンまたは進むpopstate
ボタンをクリックした (または履歴が JavaScript によって変更された) イベントのみをリッスンしたいが、ページロードでは何もしたくないということです。
言い換えれば、ページ読み込みpopstate
のイベントを他のイベントと区別したいのです。popstate
これは私がこれまでに試したことです(私はjQueryを使用しています):
$(function() {
console.log('document ready');
setTimeout(function() {
window.onpopstate = function(event) {
// Do something here
}, 10);
});
基本的に、ページの読み込み時にバインドされないように、後でlistener
関数をバインドしようとします。popstate
これはうまくいくようですが、私はこの解決策が好きではありません。つまり、 setTimeout に選択されたタイムアウトが十分に大きいが、大きすぎないことをどのように確認できますか(あまり待たせたくないため)。
よりスマートな解決策があることを願っています!