まず第一に、私がしていることや期待していることが正しいかどうかは完全にはわかりません。これに関するドキュメントはあまりないようですが、私が読んだことは、これが機能するはずであることを示唆しています。
history.pushStateを使用しようとしたときにいくつかの問題が発生したため、何が問題になっているのかを確認するためのデモページを作成することになりました。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" ></script>
<script>
window.onpopstate = function()
{
var d = new Date;
console.log(d.toString());
console.log(document.location.href);
};
$(document).ready(function()
{
$('#push').click(function()
{
var rand = Math.random();
history.pushState( {'number':rand} , 'Test '+rand , '/test/'+rand );
return false;
});
});
</script>
</head>
<body>
<a href="#" id="push">New state</a>
</body>
</html>
[新しい状態]リンクをクリックすると、コンソールにonpopstate関数が実行され、新しいURL(test / [number]など)が表示されることを期待しています。
Chromeのアドレスバーの場所は更新されますが、onpopstateイベントは発生しません。次に、ブラウザの[戻る]ボタンをクリックすると、複数のポップステートイベントが発生しているように見えます。ブラウザのナビゲーションボタンを使用するたびに、発生するはずのすべてのpopstateイベントが一度に発生しているようです。
これを説明するのはちょっと難しいです。これが私がコンソールに表示することを期待しているものです。
ページをロードします。Chromeは、ページの読み込み時に最初のpopstateイベントを発生させます
popstate.html:132011年11月19日土曜日16:23:48 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
「新しい状態」リンクをクリックします。アドレスバーの場所がhttp://example.com/test/0.06458491436205804に更新されます。
2011年11月19日土曜日16:23:53GMT+ 0000(GMT標準時)
popstate.html:14http://example.com/test/0.06458491436205804
ブラウザの戻るボタンをクリックします。アドレスバーのURLは/popstate.htmlに戻ります
popstate.html:132011年11月19日土曜日16:26:27 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
それが私が期待していることです。これが私が実際に見ているものです...
ページを読み込む
popstate.html:132011年11月19日土曜日16:27:42 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
新しい状態のリンクをクリックします。コンソールには何も表示されません。アドレスバーが/test/0.5458911096211523に変わります
ブラウザの戻るボタンをクリックします。アドレスが/popstate.htmlに戻ります
popstate.html:132011年11月19日土曜日16:27:42 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
popstate.html:132011年11月19日土曜日16:28:57 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
ご覧のとおり、最初のpopstateを繰り返し、/ popstate.htmlに戻ることを示していますが、プッシュされた状態に対しては起動しません。ブラウザで前方に押すと、次のようになります。
popstate.html:132011年11月19日土曜日16:27:42 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
popstate.html:132011年11月19日土曜日16:28:57 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/popstate.html
popstate.html:132011年11月19日土曜日16:29:58 GMT + 0000(GMT標準時)
popstate.html:14http://example.com/test/0.5458911096211523
(それらはすべて再び表示されます。スクリーンショットは次のとおりです:http://img.ctrlv.in/4ec7da04e20d3.jpg)
間違っているのか、期待が間違っているのか、それとも実際にはバグなのかわかりません。
このすべてを読んで、私のためにそれに光を当てることができる人に事前に感謝します。