ごく普通の在日

ブラウザーの履歴を操作する - HTML5 - window.history

HTML5ではwidow.historyでページロードすることなく履歴を追加、変更、修正などすることができる。
忘れないように調べたこと、検証したことをメモっておこう。
検証した環境
Ubuntu 11.04
Firefox 9.0.1
Google Chrome 16.0.912.75

- ページの履歴を追加する
history.pushState(値,ページタイトル,ページURL);
var stateObj = {'type':'A'};
history.pushState(stateObj,"Page 1", "/page1");

例えばここでpushStateが実装されると
sample.com/ から sample.com/page1 になる sample.com/page1はロードしてはいない。

- window.onpopstateと連動して使う。
HTML5ではhistory.pushStateとhistory.replaceStateが導入され、それぞれにより履歴エントリの追加と修正ができる
これらのメソッドはブラウザーの「戻る」、「進む」など window.onpopstate イベントと連動して動作する。
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
function clickPage1(){
    history.pushState({'type':'A'}, "Page 1", "/page1");
}
function clickPage2(){
    history.pushState({'type':'B'}, "Page 2", "/page2");
}
window.onpopstate = function(e){
    var currentState = history.state;
    console.log(e.state);
    console.log(currentState);
};
</script>
</head>
<body>
<br />
<button class="page1" onclick="clickPage1()">page1</button>
<button class="page2" onclick="clickPage2()">page2</button>
</body>
</html>
上記の例ではcurrentStateまたはe.stateがpushStateで入力したオブジェクトを返してくれる。
注意:Firefoxではhistory.state対応しているがChromeでは対応していない。

他に詳しいことは以下を参考
https://developer.mozilla.org/ja/DOM/Manipulating_the_browser_history
https://developer.mozilla.org/en/DOM/window.history

- HTML5に対応していないブラウザーとの互換性
HTML4/HTML5も対応できるHistory.jsを使う。
https://github.com/balupton/History.js/
window.History.pushStateなど、ネイティブのHTML5メソッドと同じように使うことができるが
popstateのかわりstatechangeを使うのすすめられている
・・・
// Bind to StateChange Event
    History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
        var State = History.getState(); // Note: We are using History.getState() instead of event.state
        History.log(State.data, State.title, State.url);
    });
・・・
HTML5ではwidow.historyでページロードすることなく履歴を追加、変更、修正などすることができる。
忘れないように調べたこと、検証したことをメモっておこう。
検証した環境
Ubuntu 11.04
Firefox 9.0.1
Google Chrome 16.0.912.75

- ページの履歴を追加する
history.pushState(値,ページタイトル,ページURL);
var stateObj = {'type':'A'};
history.pushState(stateObj,"Page 1", "/page1");

例えばここでpushStateが実装されると
sample.com/ から sample.com/page1 になる sample.com/page1はロードしてはいない。

- window.onpopstateと連動して使う。
HTML5ではhistory.pushStateとhistory.replaceStateが導入され、それぞれにより履歴エントリの追加と修正ができる
これらのメソッドはブラウザーの「戻る」、「進む」など window.onpopstate イベントと連動して動作する。
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
function clickPage1(){
    history.pushState({'type':'A'}, "Page 1", "/page1");
}
function clickPage2(){
    history.pushState({'type':'B'}, "Page 2", "/page2");
}
window.onpopstate = function(e){
    var currentState = history.state;
    console.log(e.state);
    console.log(currentState);
};
</script>
</head>
<body>
<br />
<button class="page1" onclick="clickPage1()">page1</button>
<button class="page2" onclick="clickPage2()">page2</button>
</body>
</html>
上記の例ではcurrentStateまたはe.stateがpushStateで入力したオブジェクトを返してくれる。
注意:Firefoxではhistory.state対応しているがChromeでは対応していない。

他に詳しいことは以下を参考
https://developer.mozilla.org/ja/DOM/Manipulating_the_browser_history
https://developer.mozilla.org/en/DOM/window.history

- HTML5に対応していないブラウザーとの互換性
HTML4/HTML5も対応できるHistory.jsを使う。
https://github.com/balupton/History.js/
window.History.pushStateなど、ネイティブのHTML5メソッドと同じように使うことができるが
popstateのかわりstatechangeを使うのすすめられている
・・・
// Bind to StateChange Event
    History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
        var State = History.getState(); // Note: We are using History.getState() instead of event.state
        History.log(State.data, State.title, State.url);
    });
・・・