ホームページ >ウェブフロントエンド >jsチュートリアル >window.location.hash 知識まとめ_基礎知識
Location は、アドレス バーを管理する JavaScript の組み込みオブジェクトです。たとえば、location.href=url を使用すると、ページを URL に直接リダイレクトできます。 Location.hash を使用して、ページのタグ値を取得または設定できます。たとえば、http://domain/#admin の location.hash="#admin" です。この属性値を使用すると、非常に意味のあることが実行できます。
window.location.hash シンプルなアプリケーション
1. #
の意味# は Web ページ内の位置を表します。右側の文字は位置の識別子です。たとえば、
http://www.example.com/index.html#print
はWebページindex.htmlの印刷位置を表します。ブラウザがこの URL を読み取ると、印刷位置が表示される領域まで自動的にスクロールされます。
Web ページの場所の識別子を指定する 2 つの方法があります。 1 つは、199509608094b4e81d651d148e35972c5db79b134e9f6b82c0b36e0489ee08ed などのアンカー ポイントを使用する方法であり、もう 1 つは、0e6856c47f8d911f7b1a7865abfc662c などの id 属性を使用する方法です。
2. HTTP リクエストには #
が含まれていません# はブラウザーのアクションをガイドするために使用され、サーバー側ではまったく役に立ちません。したがって、HTTP リクエストには # は含まれません。
たとえば、次の URL にアクセスします。
http://www.example.com/index.html#print
ブラウザによって送信される実際のリクエストは次のようになります:
GET /index.html HTTP/1.1
ホスト: www.example.com
ご覧のとおり、index.html をリクエストしているだけで、「#print」の部分はまったくありません。
3. #
以降の文字最初の # の後に表示される文字は、ブラウザーによって位置識別子として解釈されます。これは、これらの文字がサーバーに送信されないことを意味します。
たとえば、次の URL の本来の目的は、色の値を指定することです:
http://www.example.com/?color=#fff
ただし、ブラウザによって行われる実際のリクエストは次のとおりです:
GET /?color= HTTP/1.1
ホスト: www.example.com
ご覧のとおり、「#fff」が省略されています。 # が # にトランスコードされた場合にのみ、ブラウザはそれをリテラル文字として扱います。つまり、上記の URL は次のように記述する必要があります:
http://example.com/?color=#fff
4. Web ページのリロードをトリガーせずに # を変更します
# 以降の部分を変更するだけで、ブラウザは対応する位置までスクロールするだけで、Web ページはリロードされません。
たとえば、
からhttp://www.example.com/index.html#location1
が
に変更されましたhttp://www.example.com/index.html#location2
ブラウザはサーバーにindex.htmlを再リクエストしません。
5.#を変更するとブラウザのアクセス履歴が変更されます
#の部分を変更するたびに、ブラウザのアクセス履歴に記録が追加されます。「戻る」ボタンで前の位置に戻ります。
これは、ajax アプリケーションで特に役立ちます。さまざまな # 値を使用してさまざまなアクセス状態を表すことができ、ユーザーに特定の状態にアクセスするためのリンクを与えることができます。
上記のルールは IE 6 および IE 7 には当てはまらないことに注意してください。# の変更によって履歴が増加することはありません。
6. window.location.hash は # 値
を読み取りますプロパティ window.location.hash は読み取りおよび書き込み可能です。読み取り時はWebページのステータスが変化したかどうかを判断するために使用でき、書き込み時はWebページをリロードせずにアクセス履歴レコードが作成されます。
7. onhashchange イベント
これは HTML 5 の新しいイベントです。 # 値が変更されると、このイベントがトリガーされます。 IE8、Firefox 3.6、Chrome 5、および Safari 4.0 はこのイベントをサポートしています。
使用方法は 3 つあります:
window.onhashchange = func;
window.addEventListener("hashchange", func, false);
onhashchange をサポートしていないブラウザの場合は、setInterval を使用して location.hash の変更を監視できます。
8. Google クロールの仕組み #
デフォルトでは、Google のウェブ スパイダーは URL の # 部分を無視します。
ただし、Google は、Ajax によって生成されたコンテンツをブラウジング エンジンで読み取れるようにする場合、URL に「#!」を使用すると、それに続くコンテンツを Google が自動的に変換することも規定しています。クエリ文字列 _escaped_fragment_ 。
たとえば、Google は、twitter の新しいバージョンの URL が次のとおりであることを発見しました:
http://twitter.com/#!/username
は別の URL を自動的にクロールします:
http://twitter.com/?_escaped_fragment_=/username
このメカニズムを通じて、Google は動的な Ajax コンテンツをインデックスに登録できます。
このような問題に遭遇したネチズンを見てみましょう。次のコードに示すように、ページ上のボタンをクリックするたびに、ブラウザのアドレス バーの値が変更されます。 (ブラウザに情報を送信せずに) サーバーは新しいリクエストを送信し、「戻る」ボタンと「進む」ボタンを使用できるようにします。
現在の問題は、ie6とff3でブラウザの値が変わってしまったのですが、ff3では「進む」と「戻る」しか使えないのですが、ieではこの2つがグレーになっていて使えないのです。 。 なぜ?
コードは次のとおりです
<html> <head> <script type="text/javascript"> //每次点击都会调用test(),它会改变url的值 var i=0; function test(){ window.location.hash=i; i++; } </script> </head> <body> <input type="submit" value="xxxxxxxxxxxxx" onclick="test()"/> </body> </html>
以下は、ajax と組み合わせたハッシュの使用についてです。ajax がデータを取得するたびに、ページが更新された後、ブラウザーは履歴レコードを生成しません。これは、この場合、「戻る」ボタンと「進む」ボタンが役に立たなくなることを意味します。 、ハッシュとウィンドウを組み合わせて使用できます。ie6 と 7 は onhashchange をサポートしていませんが、setInterval を使用してハッシュの変更を定期的に確認したり、onload をチェックしたりすることができます。
具体的な実装:
<body> <div id="div1"></div> <input type="button" value="click" onclick="GetT()" /> </body> </html> <script type="text/javascript" src="js/AjaxHasPool.js"> </script> <script type="text/javascript"> var ajax = new AjaxHasPool(); var method="get"; var url ="Handler.ashx"; var i = 1; var obj = new Object(); function GetT() { document.getElementById("div1").innerHTML=i; ajax.Startup(null,url,method,ep); } function ep(xmlobj){ eval("obj['"+i+"']="+i+";"); location.hash="#"+i; ++i; } window.onhashchange=function(){ var hashStr = location.hash.replace("#",""); if(typeof(eval("obj['"+hashStr+"']"))!="undefined") document.getElementById("div1").innerHTML=eval("obj['"+hashStr+"']"); } </script>
1.AjaxHasPool は独自のカプセル化された ajax クラスで、ajax.Startup() が ajax リクエストを送信します。
2. Object オブジェクトは履歴レコードを保存します。オブジェクト属性が数値の場合は、obj["1"] を使用してインスタンス化する必要があります。そうしないと、命名規則に違反します。
3. window.onhashchange を使用してハッシュ値を検出し、履歴データを取得します。