不得不佩服下谷歌Chrome團隊,利用HTML5和CSS3實現了一本相當漂亮的在線電子書:《關于瀏覽器和互聯網20件事》。

訪問地址:http://www.20thingsilearned.com

話說這本電子書已經出來很久了,不過今天來看依然覺得相當的贊。我們無需刷新頁面,就可以來回切換電子書頁面,這正是OPOA(One Page One Application)的完美體現。

現在正在學習關于history API這方面的東西,所以特別感興趣的是他們如何使用window.history.pushState()和window.history.replaceState()來做頁面之間的不刷新切換。

今天查閱了一些資料,基本上對history API有了一個基本了解。

首先要說的就是history是個全局,即window.history。看到這個變量名你一定很熟悉,因為經常可以看到用window.history.back()或者window.history.go(-1)來返回上一頁的JavaScript代碼。

所以history并不是什么新東西,在HTML4的時代,我們可以使用它的這幾個屬性和方法:

length:歷史堆棧中的記錄數。

back():返回上一頁。

forward():前進到下一頁。

go([delta]):delta是個數字,如果不寫或為0,則刷新本頁;如果為正數,則前進到相應數目的頁面;若為負數,則后退到相應數目的頁面。

現在,HTML5為其又添加了以下2個方法:

pushState(data, title [, url]):往歷史堆棧的頂部添加一條記錄。data為一個對象或null,它會在觸發window的popstate事件(window.onpopstate)時,作為參數的state屬性傳遞過去;title為頁面的標題,但當前所有瀏覽器都忽略這個參數;url為頁面的URL,不寫則為當前頁。

replaceState(data, title [, url]):更改當前頁面的歷史記錄。參數同上。這種更改并不會去訪問該URL。不過目前只有Safari 5.0+、Chrome 8.0+、Firefox 4.0+和iOS 4.2.1+支持。如果想兼容老瀏覽器的話,可以試試History.js,而且它還修正了一些bug。

當然,在移動平臺上,我們可以大膽嘗試html5的history API。ios3.0+ 和Android2.0+ 平臺的內置瀏覽器對history都比較完美了,利用它我們可以web app更趨向與native app。

下面,推薦幾篇文章:

.Manipulating the browser history

.Session history and navigation

.Manipulating History for Fun & Profit