URL中的#
包含 #
符號的url就是一個 Fragment URL。 #
指定了網頁中的一個位置。

瀏覽器就會查詢網頁中 name
屬性值匹配 print
的 <a>
標籤。即: <a name="print"></a>
。
匹配後,瀏覽器會將該部分滾動到可視區域的頂部。
2. Http請求不包括 #
#
僅僅作用於瀏覽器,它不會影響伺服器端。所以http請求中不會包括 #
。
訪問下面的網址
http://www.example.com/index.html#print 複製程式碼
瀏覽器實際發出的請求
GET /index.html HTTP/1.1 Host: www.example.com 複製程式碼
3. #
後面的所有字元,都會被瀏覽器當做位置標誌符。
表單提交時,如果提交字元中帶有 #
字元,後面的引數就會被截斷了。
4. 修改 #
不會導致頁面重新載入,但是會改變瀏覽器的歷史記錄
location.href += '#caper';//頁面不會重新整理 複製程式碼
瀏覽器滾動到新的位置,但是並沒有reload整個頁面。
但是,它改變了瀏覽器記錄,我們可以通過瀏覽器 上一頁
按鈕回到原始的位置。
這個功能對單頁面應用非常的有用。
5. javascript 可以通過 window.location.hash
來讀取或改變 #
6. 谷歌的網路蜘蛛預設會忽略#後面的內容
谷歌網路蜘蛛負責爬取網頁的內容,以及網頁裡面的連結,它們會成為google搜尋索引的一部分。網路蜘蛛會抓取並分析HTML,但由於它並不是瀏覽器程式,也沒有javascript引擎,頁面上用來載入顯示內容的javascript並不會被執行。因此,#後面的字元會被網路蜘蛛忽視,只抓取#前面的內容,舉例:
http://www.cnblogs.com/#casper http://www.cnblogs.com/#chyingp 複製程式碼
這點無論對於開發者,還是搜尋引擎都是不利的,前者辛苦創作的內容(應用)少了很多被訪問的機會,而後者則失去了進一步豐富其內容索引的機會,特別是在ajax應用越來越多的今天。
解決方案 hash bang
只要將#改成#!即可,實現大致為:當網路蜘蛛遇到#!時候,會自動將 #!identifier
轉成 _escaped_fragment_=identifier
形式的引數。但是:
- 將
#
改成!#
告訴網路蜘蛛:我們支援這個解決方案:hash bang
- 相應的,我們的應用也需要具備相應的支援能力,對於網路蜘蛛帶
escaped_fragment=casper
的GET請求,需要能夠提供相應的網頁內容
7. onhashchange 事件
這是一個HTML 5新增的事件,當#值發生變化時,就會觸發這個事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支援該事件。
它的使用方法有三種:
window.onhashchange = func; <body onhashchange="func();"> window.addEventListener("hashchange", func, false); 複製程式碼