以下の状況で困っています。
- ユーザーがサイトにアクセス
- ユーザーが history.pushState を使用して URL を更新するリンクをクリックする
- ajax 経由で読み込まれた部分的なページ コンテンツ (jQuery を使用)
- ユーザーが通常のリンクをクリックすると、新しいページが読み込まれます
- ユーザーがクリックして pushState エントリに戻る
- ページには、ajax を介して取得されたページの部分のみが表示されるようになりました
さまざまなことに pushState を使用してサイトを強化した結果、驚くほど応答性の高い Web アプリが作成されましたが、この問題により、これを使用できなくなりました。
コードのサンプルを次に示します。
$('a').live('click', function(){
history.pushState({}, '', this.href);
popstate(this.href);
return false;
});
popstate = function(url){
$('#content').load(url);
}
window.onpopstate = function(event){
popstate(window.location.href);
event.preventDefault();
}
ノート:
- window.onpopstate 関数にアラートを配置すると、ステップ 5 でイベントがトリガーされないように見えます。これはバグですか?
- この問題は、ajax が使用されている場合にのみ発生します。
- pushState の後に呼び出すことができるように、popstate 関数を分離する必要がありました。window.onpopstate イベントを手動でトリガーする方法はありますか?