JSであなたが知るべきHistory Object

3622 ワード

最近は手元のプロジェクトで、historyのオブジェクトが多く使われていますので、自分のアプリケーションと合わせて、いくつかのオブジェクトに対してまとめました.
http://nextlevel.msn.com/artist/russellsimmons/episode,あなたがモデルのbrowserの中でscroll barを下にドラッグすると、address barの内容はそれに応じて変化していることが分かります.biography、timeline、artimeiclesなど、対応するsectionの名前に変えられます.ページは更新されていません.broserはどのようにこのようにしますか?あなたの心の中には何か考えがあると思いますが、httml 5の内容は本当にhttml 5が提供している新しいものです.httml 5の内容である以上、この文章のタイトルと何か関連がありますか?実は、historyオブジェクトに新しい方法を追加しました.pusState()
また、IEでこの方法をサポートしてくれるかどうかの質問があるかもしれませんが、残念ながら、マイクロソフトは一貫して開発者に存在感のある素晴らしい伝統を受け継いでいます.サポートしていないので、他の方法で対応してもらわなければなりません.ここでもう一つのポイントがあります.つまり、ページを更新しないといけないので、IEの中のhashObjectを使って、以下のようにhttp://nextlevel.msn.com/artist/russellsimmons#episodeを示します.この2つの方法をどのように互換しているかというと、私たちは2つのブラウザでどうやって閲覧できますか?これはもう一つの話題です.ここでは展開したくないです.雑談は抜きにして、テーマに切り込みましょう.
Historyは何ですか
DOMの中のwindowオブジェクトはブラウザの歴史にアクセスできるオブジェクトを提供しています.それは今日の主人公historyです.これは一連の方法と属性を提供して、その使命を達成します.私も次のように展開します.またHTML 5では、どのようにhistoryスタックを操作しているかを知ることもできます.
ヒットマン
ブラウザのページ切り替えをどうやって行いますか?バック()とforward()とgo()の方法があります.それらは何をしていますか?名前を望んで、あなたも分かると思います.
 前へ行く
window.history.back()

このような方法はブラウザで「back」ボタンをクリックするように、同じように前に進みたいなら、つまり元のページに戻ります.次の方法は役に立つと思います. 
window.history.forward()

特定のページに移動
go()はそれのために生まれたのです.特定のページをロードしてもいいです.もちろんこのページは現在のsession historyの中に存在しています.その必要なパラメータは全体の歴史記録に対する位置数です.(現在のページからは自分のindexは0です.)
前のページに戻る(バックに相当)
window.history.go(-1)

前のページは(forward()に相当します.
window.history.go(1)

同様に、window.history.go(2)を呼び出すことで、historyオブジェクトのページ数を知るために、以下の方法で正しいページ数を得ることができます.
var numberOfEntries=window.history.length;

ノート:IEはあなたがURLSに入ってきてgoのパラメータとすることができることを支持しますが、これは一般的な方法ではないので、注意してください.
どのようにhistoryにエントリを追加し、変更しますか?
 HTML 5は、私たちのためにhistory.pusState()とhistory.replace State()の方法を導入しています.これらの方法は、項目を追加して変更することができます.このような方法は、ミッションを完了するだけです.ここには、背後の英雄、window.onpopstateイベントがあります.後から紹介します.
私達はhistory.pusStateを使ってstateを変えます.私達は一つのページの引用refferを得ます.それはXMLHttpRequest()で作成されたHttp headerでページに対する参照です.
前の例:
住所を仮定するhttp://localhost/foo.html どうやって下記のコードを引用すれば、どのような結果が出ますか?
var stateObj={foo:"bar"};

history.pushState(stateObj,"page 2", "bar.html");

私たちはアドレスバーに表示します.http://localhost/bar.htmlただし、ブラウザでbar.を読み込まないように注意してください.bar.が存在するかどうかを確認することもできません.
今ユーザがジャンプしたとします.http://google.comそして、バックボタンを押します.現在のURLバーに表示されます.http://localhost/bar.html今のpageはpopstateイベントを得ます.そのstate objectはstateObjのcopyを含んでいます.このpageはfooのように見えます.pageはその内容を変えますが、popstate事件の中にあります.
もう一度backボタンを押すと、今度は本当にhttp://localhost/foo.html今回はdocumentでもpopstate eventを得ることができますが、得られたstate objectはnullとなります.もちろん、今回のbackはdocumentの内容を変えられません.前のbackで得られた内容です.もちろん、あなたが考えているなら、popstate eventで変えられます.顔
pusshStateを詳しく見てみましょう.
pusshStateは3つのパラメータを受信します.state object、title、URL(optitionaly).
state object--前に見たように、javascript objectです.私達はpusStateを使ってイベントを増やす時、このentryと一緒に生活します.userがページの間で切り替わると、popstate eventをトリガします.eventryのstate jobctの一つのcopyが含まれます.
title--分かりますが、これはまだ使えません.
URL――履歴に新しい項目が追加されます.
 
役割から見て、pusshState()とwindow.locationを設置することは一致しています.この二つの方法はいずれも他のページに関するhistory entryを作成してアクティブにしますが、以下の利点があります.
1.新しいURLは任意のURLと現在のページが同じドメインにあります.window.locationは一つのdocumentしかありません.
2.あなたが望んでいないURLを変える必要はありません.
3.任意のdataを充填して、あなたのhistory entryと関連ができます.hash-based方法は、コーディングしなければなりません.