関連ビデオの無限スクロール部分を改善
昔のTwitter的な無限スクロールUIを使っていますが、ある程度無限スクロール情報を表示した後に画面遷移(ビデオページに移動)すると、ブラウザの戻るボタンを押した時に元のページが以前の状態で表示されない問題がありました。
Ajaxを使って動的に要素を追加すると起きる問題ですが、ブラウザのhistoryを操作することによって改善できるようです。
ブラウザのhistoryにアクセスするAPIには
window.history.pushState
window.history.replaceState
というものがあります。pushStateは履歴に新しく追加します。replaceStateの場合は履歴を書き換えるようです。詳しくはこちらで解説されています。
今回は、今をときめくcookpadさんのモバイルサイトの「続きをみる」を参考に、次ページの情報を表示する時には bulk_load というクエリーを追加することにしました。
例えば、 http://morolicio.us/video/48653 というページの場合は、「もっと見る」ボタンを押した時に、 http://morolicio.us/video/48653?bulk_load=24 となります(PC版の場合)
ブラウザの履歴書き換えには window.history.replaceState を使用します。
window.history.replaceState(null, null, '?bulk_load=24');
戻る・進むボタンを押した時のイベントはこんな感じ。
$(window).bind("popstate", function() { $container.infinitescroll({ state: { currPage: 2 } }); });
主要ブラウザ(Safari、Chrome、Firefox、Opera)で確認してみましたが、そこそこ動いているようです。IEは当然確認していません。Operaだけはうまく動作していないようです。
参考サイトにはちゃんとしたコードがあるので、もう少しきちんと動作するようにJavaScript書き直したいと思います。