1. 程式人生 > >location.hash的不一樣用法

location.hash的不一樣用法

瀏覽器 dev fis light 回退 sea oca ie8 .org

  

  除了可以當做錨點,定位到同name位置,location.hash還有兩個用法。

  平時開發都會用得到。

  一:使js事件在瀏覽器中產生歷史記錄。

    舉個栗子:

      我們在JS裏面改變了頁面的數據、樣式等,比如我們首先執行了JS函數A,把頁面由白色變成了紅色,在執行了JS函數B,把頁面由紅色變成了黑色,這個時候我想退回到頁面為紅色的狀態,那麽該怎麽辦?如果沒有location.hash,我們只有重新載入頁面,在去觸發執行函數A,因為對於這些事件,瀏覽器是沒有歷史記錄的,“前進、後退”按鈕不能用的,這樣顯然太麻煩了,對用戶不是很友好。有了location.hash我們就有辦法了,在函數A和函數B裏面加一段代碼,location.hash=A這樣,執行到該代碼後,就相當於觸發了喵鏈接,大家都知道喵鏈接是不會讓頁面重新載入的,只是在頁面內部定位而已,所以不會造成其他壞的影響,但是細心的你會發現執行了該代碼後,“前進、後退”按鈕就可以用了,你可以從容的回退到你想要的任何一步操作了,就像你在執行函數時種下了歷史記錄一樣。 onhashchange事件就是當喵鏈接發生改變的時候觸發的。

      IE 的部份,IE8 之後才有支持:「onhashchange Event」

      Firefox 則是 3.6 之後才有支持:「window.onhashchange」

  二:用戶使用網址直接訪問舊頁面。

   首先要知道,如果在瀏覽器地址中輸入網址,發送請求,服務器是只能接受地址的,但是不帶hash值,舉個栗子:

    比如在瀏覽器中輸入 :

http://fis.baidu.com/#simple

    服務器接受的卻是這個:

http://fis.baidu.com

    也就是說,在服務器中,是無法請求回來一個帶hash值的頁面的。

    那麽這個問題,就要留在客戶端來解決,這就使用到了location.hash。

    舉個栗子:    

      比如,我們的頁面上有三個功能:A、B、C,我們要分別給它們分配一個hash值:#A、#B、#C,在頁面初始化的時候,通過window.location.hash來判斷用戶需要訪問的頁面,然後通過javascript來調整顯示頁面。

      代碼:  

var hash; 
hash=(!window.location.hash)?"#search":window.location.hash; 
window.location.hash=hash; 
  //調整地址欄地址,使前進、後退按鈕能使用 
switch(hash){   
case "#A":  
    
//顯示A所代表的面板 break; case "#B": //顯示B所代表的面板 break; case "#C": //顯示C所代表的面板 break; }

  

  總結一下:

  1.通過window.location.hash=hash這個語句來調整地址欄的地址,使得瀏覽器裏邊的“前進”、“後退”按鈕能正常使用(實質上欺騙了瀏覽器)。

  2.根據hash值的不同來顯示不同的面板(用戶可以收藏對應的面板了)。

  其實兩種用法都是一個意思,但是這樣說,可能會讓你很明白。

  

location.hash的不一樣用法