2010-05-29 51 views
2

我正在開發一個100%ajax的系統,當然,第一個請求除外。在不加載的情況下重寫document.location

我有興趣使用javascript更改document.location中的地址。 但我不希望瀏覽器在該「新」位置加載頁面。

有誰知道我該怎麼做?

+1

爲什麼要更改瀏覽器的位置地址?如果這樣,用戶/谷歌可以鏈接到任何頁面,然後只使用普通的HTTP請求。通過使用100%AJAX,您正在創建一個「單頁網站」。對於普通的HTTP和AJAX都有親和的感覺......我總是發現它們兩者的良好結合是最好的結果。 – scunliffe 2010-05-29 23:59:06

回答

6

要重寫整個位置而不僅僅是「散列」部分,可以使用瀏覽器歷史API,儘管目前它似乎只是supported in Gecko 1.9.3/Firefox 4

history.replaceState({}, document.title, url) 
+0

該死! 謝謝! – Miro 2010-05-30 02:28:25

+1

Miro:請注意,*虛假網址不會被搜索引擎編入索引,並且如果用戶製作書籤或者只是刷新頁面,他將得到一個404,除非你在網站上實現了一種URL重寫技術服務器端......此外,您需要等到成熟瀏覽器支持'history.replaceState',現在只能在Firefox 3.7 pre alpha和Chrome 5 Beta AFIK上使用... – CMS 2010-05-30 03:24:28

+1

@Miro您真的您的網站上只有Gecko 1.9.3/Firefox 4用戶? :) – bzlm 2010-10-22 13:39:49

8

更改整個網址而無需導航是不可能的,試想一下它可能生成的security issues

你只能改變location.hash,這是遵循#符號的URL的一部分:

location.hash = "foo"; 

您的網址將變爲http://someurl.com/#foo

+0

這個想法很好,但這會讓搜索引擎(谷歌,雅虎等...)索引無用,因爲他們會認爲它是同一個頁面。 而我正在使用的網址沒有考慮散列。 http://site.com/products/detail/1(這很好) http://site.com#/products/detail/1(這不好) 有沒有人認爲這是可能的? – Miro 2010-05-29 23:34:34

+0

@Miro - hummm ...首先你可以「使用AJAX做第一個請求」,其次,我認爲你應該看看其他的東西,然後再擔心你的網址,以便讓你的網站搜索引擎友好,第三你有2個選項,或者你現在停止代碼或開始學習一些東西了! – 2010-05-29 23:46:07

1

您可以使用Gmail的使用相同的方法。在網址末尾附加一個錨點,瀏覽器不應該重新加載頁面,但您可以閱讀document.location.href中的信息並對其執行操作。這也將保持背部按鈕的功能完好的(提供您的JavaScript支持)

例如

第一頁是http://www.mypage.com/index.php你點擊到下一個「頁」使用<a href="#page2">link</a>,並更改爲http://www.mypage.com/index.php#page2

相關問題