今天為jframe做刷新設置的時候疾棵,發(fā)現(xiàn)頁面無法正常刷新理郑。而且只有在點擊出某個dialog插件之后才無法刷新诈火。將window.location.href打印出來之后發(fā)現(xiàn)在正常的路徑后面多余了一個#號溜哮,刪掉最后一個#號之后發(fā)現(xiàn)可以正常刷新頁面屿良∮扑ǎ“#”是dialog插件附加上去的霉涨。
以下為搜索url中的#號的相關資料:
1. 井號在URL中指定的是頁面中的一個位置
井號作為頁面定位符出現(xiàn)在URL中,比如:http://www.httpwatch.com/features.htm#print 闸迷,此URL表示在頁面features.htm中print的位置嵌纲。瀏覽器讀取這個URL后,會自動將print位置滾動至可視區(qū)域腥沽。

在頁面上添加錨點的方法為:<a name=”print”></a>或使用<div id=”print” >逮走。
2.井號后面的數(shù)據(jù)不會發(fā)送到HTTP請求中
當時使用類似HttpWatch工具時,你是無法在Http請求中找到井號后面的參數(shù)的今阳,原因是井號后面的參數(shù)是針對瀏覽器起作用的而不是服務器端师溅。
[圖片上傳中。盾舌。墓臭。(2)]
3. 任務位于井號后面的字符都是位置標識符
不管第一個井號后面跟的是什么參數(shù),只要是在井號后面的參數(shù)一律看成是位置標識符妖谴。
比如這樣一個鏈接(http://example.com/?color=#ffff&shape=circle)窿锉,后面跟的參數(shù)是顏色和形狀,但是服務器卻并不能理解URL中的含義膝舅。服務器接收到的只是:

4. 改變井號后面的參數(shù)不會觸發(fā)頁面的重新加載但是會留下一個歷史記錄
僅改變井號后面的內(nèi)容嗡载,只會使瀏覽器滾動到相應的位置,并不會重現(xiàn)加載頁面仍稀。
比如從http://www.httpwatch.com/features.htm#filter到http://www.httpwatch.com/features.htm#print洼滚,瀏覽器并不會去重新請求頁面,但是此操作會在瀏覽器的歷史記錄中添加一次記錄技潘,即你可以通過返回按鈕回答上次的位置遥巴。這個特性對Ajax來說特別的有用千康,可以通過設置不同井號值,來表示不同的訪問狀態(tài)铲掐,并返回不同的內(nèi)容給用戶拾弃。(注:在IE6和IE7下井號的改變不會增加歷史記錄。)
5摆霉、可以通過javascript使用window.location.hash來改變井號后面的值
window.location.hash這個屬性可以對URL中的井號參數(shù)進行修改砸彬,基于這個原理,我們可以在不重載頁面的前提下創(chuàng)造一天新的訪問記錄斯入。如標記框架頁面當前的頁面:

除此之外,HTML 5新增的onhashchange事件蛀蜜,當#值發(fā)生變化時刻两,就會觸發(fā)這個事件。
6. Googlebot對井號的過濾機制
默認情況下Google在索引頁面的時候會忽略井號后面的參數(shù)滴某,同時也不會去執(zhí)行頁面中的javascript磅摹。然而谷歌為了支持對Ajax生成內(nèi)容的索引,定義了如果在URL中使用“#!”霎奢,則Google會自動將其后面的內(nèi)容轉(zhuǎn)成查詢字符串escaped_fragment的值户誓。
比如最新的twitter URL:http://twitter.com/#!/username,Google會自動請求http://twitter.com/?escaped_fragment=/username來獲取Ajax內(nèi)容幕侠。