2012-05-14 264 views
1

在使用YUI瀏覽器歷史記錄管理器來跟蹤Ajax導航。我喜歡註冊歷史對象:YUI瀏覽器歷史記錄管理器返回按鈕

YAHOO.util.History.register("state",init, onStateChange); 

這裏onStateChange獲取調用,當我做

YAHOO.util.History.navigate("state",urlhash); 

,當我按後退按鈕。

有沒有辦法知道,如果onStateChange被稱爲上的後退按鈕或致電導航?

回答

1

如果這個事件可以由外部系統有時也被稱爲(在這種情況下,瀏覽器後退按鈕),並通過自己的代碼,有時,你可以通過它的要求做一些特別的區分來電時,您自己的代碼調用方法。將call調用到您自己的幫助器方法中的navigate()可以幫助確保您保持與此相符。

在YUI文檔我看到寄存器()可以帶一個可選的第四個參數(等等),這是將獲得通過到您的onStateChange處理函數中的任意對象。該對象的其中一個屬性可能是一個標誌,指示它是從您的代碼調用還是由瀏覽器啓動,並且您的navigate()包裝器始終設置該標誌。記得把它放回你的處理程序中。

注:我不熟悉YUI的ExtJS的,也許有些大師,知道該API可以更好地幫助,但是這是可以工作的通用策略。這個答案提出了一個不雅的假設,即在對任何其他導航有機會發生之前,調用navigate()將使該處理程序可靠地觸發,這在單線程JavaScript世界中可能是安全的。

+0

yep ....圍繞對象包裝YUI方法,並使用可選參數來註冊方法。作爲第四參數,我在當前上下文中傳遞,並使用該上下文來跟蹤導航的調用者。我會很快粘貼我的代碼。 – riship89