HTML 5 history API実践
13753 ワード
一、history API知識点まとめ
HTML 4ではwindowを使用できます.historyオブジェクトは、履歴のジャンプを制御します.使用できる方法は、次のとおりです.
HTML 5には、次の4つの利用可能なAPIが追加されました.
二、新しいAPIの実際の使用
これらの新しいAPIがあることを知って、私たちはどのようにそれらを利用することができますか?次の2つの使用例を示します.
①ajaxプログラムでブラウザ後退ボタンの機能を復元します.このアプリケーションは、ajaxの固有の欠点(ブラウザの戻るボタンで前のページに戻ることができない)のため、ajaxリクエストを開始するときに履歴にレコードを追加し、アドレスバーの値を変更することで、ajaxの非同期ロードの利点を維持しながら、正常なジャンプをシミュレートすることが広く知られています.方法は次のとおりです.
次のボタンをクリックして、アドレスバーの変化に注意します.
//<![CDATA[
function loadAnother(){
var title='もう一つのエッセイ';・13;
var url = 'http://www.cnblogs.com/lvdabao/p/もう一つのエッセイhtml';
var state = {title:title,url:url};
history.pushState(state,title,url);//3番目のパラメータurlの値がアドレスバー に表示されます.
}
//]]>
②非同期要求のパラメータを保存し、ページ戻り時に元のページの動的データを再現する.具体的なニーズは、例えば、検索結果リストページにあり、ページの内容は検索条件に基づいて動的に得られ、そのうちの1つをクリックして詳細プレビュー(ajaxリクエスト)を行うことができ、詳細ページが「戻る」をクリックしたとき、リストページの初期ロード時のデータではなく、元の検索データが戻ってくることを望んでいます.以前は,このようなニーズを再送パラメータで解決できたが,その欠点は大量のデータを往復させる必要があり,ページレベルが多ければ不便であることである.では、historyを使用したonpopstateイベントと組み合わせて、このような機能を完了することができます.例として、
HTML 5 historyを紹介するページを作ります.index.htmlのコードは次のとおりです.
historyの3つの新しい特性をそれぞれ紹介し、jqueryのloadメソッドを呼び出すことで非同期ロードし、要求を1に送信します.phpは、対応するパラメータを同時に渡します.バックグラウンドでリクエストを受信した後、異なるパラメータに基づいて異なるデータを返します.phpコードは次のとおりです.
ここでphpファイルをアップロードできません.コードをローカルサーバテストにコピーできます.これによりgithubのようなページロードメカニズムを実現することができる.
以上が私が見たhistoryに関する2つの使い方です.誤りを発見したら指摘を歓迎し、他の観点も交流を歓迎する.
HTML 4ではwindowを使用できます.historyオブジェクトは、履歴のジャンプを制御します.使用できる方法は、次のとおりです.
history.forward();//
history.back();//
history.go(n);// n ,n=0 ,n=-1
HTML 5には、次の4つの利用可能なAPIが追加されました.
history.pushState(data[,title][,url]);// ,data js , json ,title , 。 url , url
history.replaceState(data[,title][,url]);// 。 。
history.state;// , state 。
window.onpopstate;// , js forward()、back()、go() 。 event ,event.state pushState() replaceState() data 。
二、新しいAPIの実際の使用
これらの新しいAPIがあることを知って、私たちはどのようにそれらを利用することができますか?次の2つの使用例を示します.
①ajaxプログラムでブラウザ後退ボタンの機能を復元します.このアプリケーションは、ajaxの固有の欠点(ブラウザの戻るボタンで前のページに戻ることができない)のため、ajaxリクエストを開始するときに履歴にレコードを追加し、アドレスバーの値を変更することで、ajaxの非同期ロードの利点を維持しながら、正常なジャンプをシミュレートすることが広く知られています.方法は次のとおりです.
var title = ' ';
var url = 'http://www.cnblogs.com/lvdabao/p/ .html';
var state = {title:title,url:url};
history.pushState(state,title,url);// url
次のボタンをクリックして、アドレスバーの変化に注意します.
//<![CDATA[
function loadAnother(){
var title='もう一つのエッセイ';・13;
var url = 'http://www.cnblogs.com/lvdabao/p/もう一つのエッセイhtml';
var state = {title:title,url:url};
history.pushState(state,title,url);//3番目のパラメータurlの値がアドレスバー に表示されます.
}
//]]>
②非同期要求のパラメータを保存し、ページ戻り時に元のページの動的データを再現する.具体的なニーズは、例えば、検索結果リストページにあり、ページの内容は検索条件に基づいて動的に得られ、そのうちの1つをクリックして詳細プレビュー(ajaxリクエスト)を行うことができ、詳細ページが「戻る」をクリックしたとき、リストページの初期ロード時のデータではなく、元の検索データが戻ってくることを望んでいます.以前は,このようなニーズを再送パラメータで解決できたが,その欠点は大量のデータを往復させる必要があり,ページレベルが多ければ不便であることである.では、historyを使用したonpopstateイベントと組み合わせて、このような機能を完了することができます.例として、
HTML 5 historyを紹介するページを作ります.index.htmlのコードは次のとおりです.
<body>
<p>HTML5 history API </p>
<a href="javascript:void(0)" id="pushstate">history.pushState(data, title [, url])</a>
<a href="javascript:void(0)" id="replacestate">history.replaceState(data, title [, url]) </a>
<a href="javascript:void(0)" id="onpopstate">window.onpopstate</a>
<a href="javascript:void(0)" id="back"> </a>
<div id="loaddiv"></div>
<script>
$(function(){
var loaddiv = $('#loaddiv');
// , loaddiv
$('#pushstate').click(function(){
loaddiv.load('1.php?stype=push');
history.pushState({title:'push',url:'1.php?stype=push'});
});
$('#replacestate').click(function(){
loaddiv.load('1.php?stype=replace');
history.pushState({title:'replace',url:'1.php?stype=replace'});
});
$('#onpopstate').click(function(){
loaddiv.load('1.php?stype=onpop');
history.pushState({title:'onpop',url:'1.php?stype=onpop'});
});
// ,
$('#back').click(function(){
history.back();
});
// popstate , e.state , pushState , url 。 。
window.onpopstate = function(e){
if(e.state){
loaddiv.load(e.state.url);
}
}
});
</script>
</body>
historyの3つの新しい特性をそれぞれ紹介し、jqueryのloadメソッドを呼び出すことで非同期ロードし、要求を1に送信します.phpは、対応するパラメータを同時に渡します.バックグラウンドでリクエストを受信した後、異なるパラメータに基づいて異なるデータを返します.phpコードは次のとおりです.
<?php
$type = $_REQUEST['stype'];
switch($type){
case 'push' :
echo 'history.pushState(data, title [, url]): ;data onpopstate ;title , ;url , , ';
break;
case 'replace' :
echo 'history.replaceState(data, title [, url]) : , ';
break;
case 'onpop' :
echo 'window.onpopstate: pushState replaceState ;';
break;
}
?>
ここでphpファイルをアップロードできません.コードをローカルサーバテストにコピーできます.これによりgithubのようなページロードメカニズムを実現することができる.
以上が私が見たhistoryに関する2つの使い方です.誤りを発見したら指摘を歓迎し、他の観点も交流を歓迎する.