2012-04-06 39 views
0

我有一個阿賈克斯導航類似像here在Ajax導航中刪除哈希(#)而不刷新

現在如果一個菜單點擊window.location.hash加入這樣#about

我想刪除哈希(#),使人們可以輕鬆地複製和自然共享的鏈接。

如何在2012年4月沒有pagerefreshbrowserwise(IE7 +,FF,Opera,Safari)的情況下完成這項工作?

對於靈感:Here實際上是有人已經這樣做,點擊「投資組合」或「功能」,並在瀏覽器中觀看網址。

感謝提示

+0

一個簡單的搜索會讓你引到了答案: http://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page – Griffin 2012-04-06 23:30:21

+0

不要ü想轉換將「example.com/#about」鏈接到「example.com/about」?在這種情況下,您需要一些.htaccess更改 – 2012-04-06 23:35:55

+0

是prashant。還有什麼 – Email 2012-04-06 23:36:26

回答

1

使用歷史API時可用。而不是設置散列(在支持它的瀏覽器)的,去:

history.pushState({ /* Some state object */ }, "A title representing this state"); 

然後,處理在popstate事件偵聽器的狀態變化。以這種方式做事意味着URL不會改變,但歷史將仍然功能齊全。

+0

範圍browserwise(ff 3+?)是什麼? 「什麼時候可用」是什麼意思? – Email 2012-04-06 23:42:13

+0

@電子郵件:檢查「history.pushState」是否首先存在 - 這是一個相對較新的HTML5功能。如果沒有,只要做你現在正在做的事情,用戶將不得不有更復雜的URL。 – Ryan 2012-04-06 23:51:05

+0

@Email:http://stackoverflow.com/questions/4612598/which-browsers-support-the-html5-history-api – Ryan 2012-04-06 23:52:08

1

你要找的是所謂pushStatehttp://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate

HTML5爲我們提供了訪問瀏覽器的瀏覽歷史,並讓我們操縱它在即時:

window.history.pushState(data, "Title", "/new-url"); 

這操縱當前頁面將「/ new-url」顯示爲頁面的標題,並將「標題」顯示爲頁面的標題。有一些JavaScript庫會爲你處理這個問題,如backbone.js

如果您分享的網址,您將需要命令您的應用程序仍然提供正確的內容(或者只是提供您的「基礎」JavaScript應用程序,爲您提供內容)。

希望這能讓你指出正確的方向。

+0

我的需求是否可以滿足那個(IE7 +,FF,Opera,Safari)?如果不是,我還能照顧什麼?是backbone.js需要爲什麼?thx – Email 2012-04-06 23:43:28

+0

如果沒有使用HTML5 pushState,沒有辦法做到這一點,除非您無障礙地刷新頁面。 backbone.js只是一個框架,可以幫助您組織非常ajax和以javascript爲中心的應用程序,併爲您處理路由等。如果使用backbone.js並設置'pushState:true'選項,它將回退到在不支持pushState的瀏覽器上操作URL哈希。你不需要像backbone.js這樣的框架,它只是使事情更容易處理。如果你想支持IE8或更低版本,那麼你將不得不把哈希支持作爲後備。 – nzifnab 2012-04-07 00:28:47