2013-12-14 50 views
4

我知道,在現代瀏覽器,我可以靜靜地改變URL(不重新加載頁面)這樣的URL變化:如何處理由JavaScript

window.history.pushState(「object or string」, 「Title」, 「/new-url」); 

但我希望能夠檢測URL的變化。當用戶在地址欄中輸入新的URL時,如何處理事件並防止頁面重新加載?

P.S.我知道我可以使用onhashchange但我只是不想使用散列:)

+0

我會看看Backbone.js(Backbone.Router)或AngularJS的源代碼。 – hgoebl

+2

防止用戶在地址欄中輸入地址似乎非常不利。 (謝天謝地,對於我們的用戶),這是不可能的。 –

+0

@hgoebl謝謝,我期待你的回答。 – Ali

回答

1

Event when window.location.href changes所述,這是不可能的,沒有投票。這是2010年。也許同時有HTML5瀏覽器的解決方案。

也許你已經知道,不使用hashchange有關於服務器端,爬行不足,404檢測,...

但使用哈希也有一些缺陷,特別是當它涉及到郵寄的深層鏈接(重定向不會傳輸哈希,通常由webmail客戶端使用,以獲得乾淨的查閱者)。

我建議使用經過測試的庫用於URL路由和歷史記錄API。我相信你在microjs.com,JSterJSDB.IO找到一個。有許多在MSIE等禁用瀏覽器上進行優雅回退。

我最好的投注將是history.jsCrossroads.js(與哈希)。

如果你已經使用了像Backbone.js,AngularJS,Ember之類的MVC框架,你會得到你想要的免費。

畢竟我不確定這些庫中的任何一個能否在location.href更改時禁止重新加載(單頁)頁面。由於你失去了大部分狀態,我會使用#hashes。恕我直言,單頁面應用的用戶不應該更改瀏覽器位置,而是使用您的應用的導航選項。

+0

1)投票並不漂亮,但我認爲它可能工作! 2)感謝有關鏈接,我會看看這些圖書館。 3)我同意你,單頁面應用程序的用戶不應該手動更改瀏覽器位置,但問題是如果發生這種情況該怎麼辦?! – Ali