2011-12-27 45 views
1

我正在創建一個HTML和Javascript客戶端,用於在與REST API交談的瀏覽器中運行。我正在使用RouteMap來設置我的網址。所以我一直保留着一個慣例是這樣的當用戶點擊相同的鏈接時,Hashchange不會觸發

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/ 

我設置只有一個途徑,我抓住的功能這些參數一定到hashchange。大多數事情都很好。只有兩個問題,我因爲他們而陷入困境。

  1. 如果用戶點擊兩次相同的鏈接,hashchange事件不會觸發。是的,散列沒有改變,所以顯然它不會觸發。但是應該有一些可以做的事情,我錯過了。
  2. 如果我改變UI中的某些東西(比如調出新的div並隱藏一些),我不想更改哈希鏈接,我放棄了該歷史記錄,並且無法通過正確單擊後退按鈕返回。

任何幫助將不勝感激。

回答

1

對於#1,您可能希望將處理程序附加到鏈接單擊事件。這樣你可以知道鏈接是否被點擊。當我使用onhashchange時,我總是附加一些點擊事件來協助polyfills進行onhashchange,所以至少我可以告訴它什麼時候失敗。

對於#2,我想指出自動更改用戶的歷史記錄是有問題的。你可以用一分鐘毫無意義的哈希變化填充某人的歷史記錄。我建議只在用戶實際交互時更改歷史記錄。除此之外,HTML5的確提供了pushStatepopStateReference

相關問題