我認爲你正在尋找history.pushState網址,它允許你做部分網頁加載,並有和沒有JavaScript的相同的網址。
例如,假設您的基本網址http://site.com/
隨着history.pushState,您可以使用JavaScript來修改頁面是javascript.htm
,使URL改變http://site.com/javascript.htm
。
#!
網址只能使用javascript,因爲#fragment無法訪問服務器端。隨着hashbangs,你的網址將是類似於http://site.com/#javascript.htm
請注意,!
是不必要的。由於您可以在散列之後設置任何內容,因此您也可以使用url http://site.com/#!/javascript.htm
。
不幸的是,由於IE不支持history.pushState,所以你必須有#!
的url作爲後備。
這兩種方法都沒有打破後退按鈕,但必須爲每種方法設置不同的方式。
Hashbangs工作是這樣的:
function change(){
//page update logic
}
//hashchange event binding
(typeof window.addeventListener === "function")
? window.addEventListener("hashchange", change, false)
: window.attachEvent("onhashchange", change);
//This is how the hash is set
location.hash = "hashstring";
//Accessing it returns the hashstring, with a #
location.hash; //returns #hashstring
History.pushState是更復雜一點,因爲你存儲在一個對象的頁面的「狀態」。
下面是關於這種方法的一些很好的參考:
兩種方法都需要JavaScript頁面操作。我有這種類型的網址的例子。 http://timshomepage.net/comic/已鏈接到一堆不同的webcomics,並將它們嵌入到頁面中的iframe中。在禁用javascript的情況下,該鏈接將類似http://timshomepage.net/comic/dilbert。隨着history.pushState,我可以有相同的網址。隨着hashbang後備,我得到這樣的網址:http://timshomepage.net/comic/#!/dilbert
我不能完全看到在哪裏使用#!在URL中斷鏈接。你能舉一個這種情況發生的例子嗎? – demonkoryu
你如何使前進和後退按鈕的工作? – Pointy
@Pointy:我還沒有得到那麼多,但是內部鏈接表面上會被正常寫入,並被Javascript攔截以處理請求併發布響應。如果這不起作用,那麼我想我必須以某種方式手動編寫它。 @demonkoryo:編輯澄清。 – dclowd9901