2008-08-27 181 views
9

我正在使用ASP.NET Ajax編寫一個簡單的相冊應用程序。
該應用使用異步Ajax調用來預加載相冊中的下一張照片,而無需更改瀏覽器中的URL。如何在使用Ajax時保持瀏覽器歷史同步?

問題是,當用戶點擊瀏覽器中的按鈕時,該應用程序不會回到上一張照片,而是導航到應用程序的主頁。

有沒有一種方法可以誘使瀏覽器添加每個Ajax調用瀏覽歷史?

回答

3

許多網站使用一個隱藏的iframe來做到這一點,只需刷新iframe的新網址,將其添加到瀏覽歷史記錄。然後,您只需處理應用程序對這些「後退按鈕」事件的反應 - 您將需要檢測iframe的狀態/位置,或使用該URL刷新頁面。

+0

如果我理解正確,iframe將實際發送非ajax請求到服務器。這對於服務器來說是不必要的負載。對於低流量的網站可能沒問題,但它絕對不是一個好的解決方案 - 如果請求發生。 – 2015-11-24 11:10:57

0

3.5 SP1更新現在支持ASP.NET ajax中的瀏覽器歷史記錄和後退按鈕。

0

有關後退按鈕的所有解決方案,它們都不是「自動」的。對於每一個你將不得不做一些工作來堅持頁面的狀態。所以不行,沒有辦法「哄騙」瀏覽器,但是有一些很棒的庫可以幫助你使用後退按鈕。

14

更新:現在有HTML5歷史API(pushState,popState),它不贊成使用HTML4 hashchange功能。 History.js爲HTML4瀏覽器提供了跨瀏覽器兼容性和optionalhashchange回退。

對於這個問題的答案將是或多或少一樣我的回答這些問題:

綜上所述,你肯定會想看看這兩個解釋整個hashchange過程並添加ajax的項目:

  • jQuery History(使用散列來管理您的頁面狀態並綁定到更改以更新您的頁面)。 (jQuery歷史的ajax擴展,允許完整的ajax網站,同時完全不顯眼和優雅地可降解)。

1

您可以使用簡單的&輕量級PathJS lib。

用例:

Path.map("#/page1").to(function(){ 
    ... 
}); 

Path.map("#/page2").to(function(){ 
    ... 
}); 

Path.root("#/mainpage"); 
Path.listen();