2011-08-19 293 views
3

如果創建的URL不是「真正的」URL,那麼使用History API有什麼意義?當然,我可以儘可能多地推送狀態,但如果我不能,那麼將這些URL之一包含在某個書籤中,這有什麼意義?我真正的問題是 - 你如何設置一個Web服務器,以便不管輸入的地址如何,它只加載一個Web應用程序(保留地址以便我可以使用JavaScript引用它來加載相關內容)?HTML5歷史API和書籤

因此,我可以使用歷史記錄API來顯示適當的地址,然後讓用戶在稍後返回到網站時實際工作。

回答

2

從歷史記錄API創建的URL沒有任何假冒。當訪問者使用它們加載整個頁面時(通過外部超鏈接或書籤或不是),您只需要正確處理它們。您可以在客戶端或服務器端執行此操作。

處理URLs服務器端當然完全取決於你如何開發你的應用程序,並且這個問題有點超出範圍。

但是,在客戶端,您需要JavaScript解析URL,然後進行相應的響應。我個人發現jQuery Address插件非常適合這個。

包含插件像這樣,包括絕對路徑到你的應用程序的根與state說法:

<script type="text/javascript" src="jquery.address-1.3.min.js?state=/absolute/path/to/your/application"></script>

然後你不得不jQuery.address解析URL時,頁面加載和DOM準備:

// Handle the initial load and make the page look the way it's supposed to 
$.address.init(function(e) { 
    // Address and path details can be found in the event object. 
    // Explore it a bit via console.log() 
    console.log(e); 
}); 

對於一個很好的,工作的例子,我建議您查看的this jQuery.address example源以及the jQuery.address docs

+0

非常感謝您的詳細解答。因此,根據您提供的示例鏈接,當我備份到http://www.asual.com/jquery/address/samples/時,該示例說明了「Simple PHP/mod_rewrite支持示例HTML5的示例」,那麼你會假設他們使用nwellcome的mod_rewrite來引導傳入的超鏈接,然後在應用程序中使用jQuery.address更新地址狀態? – RyJ

+0

是的,確切地說。你最好重寫(不重定向!)應用程序URL下的所有流量到您的應用程序的確切URL(您在'state'參數中指定的相同地址)。 Apache使用mod_rewrite來實現這一點,但任何體面的Web服務器和Web框架將提供某種URL重寫方案。 – Roshambo

1

利用standard organization within URLs。在查詢中對狀態信息進行編碼,可以由客戶端和服務器腳本處理,但始終使用指向您的Web應用程序的相同基本URL。

+0

我從你的答案明白的是,而不是簡單地將內容添加到ULR中作爲「基本URL +」/ somecontent'「,使用類似」基本URL +「?Variable1 = SomeContentA&variable2 = SomeContentB'」。我對麼 ? – vivek

1

如果你使用Apache,與mod_rewrite你可以直接您想在服務器上的同一資源然而,許多網址。然後,該資源必須檢查URL並以正確的狀態動態創建頁面,無論服務器端還是客戶端完成了。

0

如果你不使用MVC框架,你可以使用.htaccess來處理這個提到@nwellcome

# html5 pushstate (history) support: 
<ifModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !index 
    RewriteRule (.*) index.html [L] 
</ifModule> 

來源:HTML5 History/pushState URLs, .htaccess and You