我怎样才能检测到一个JavaScript的地址栏更改?

我有一个Ajax沉重的应用程序,可能有一个URL如

http://example.com/myApp/#page=1 

当用户操纵网站时,地址栏可以变成类似的东西

 http://example.com/myApp/#page=5 

无需重新加载页面。

我的问题是以下顺序:

  1. 用户对第一个URL进行书签。
  2. 用户操纵应用程序,使第二个URL是当前状态。
  3. 用户点击在步骤1中创build的书签。
  4. 地址栏中的url从http://example.com/myApp/#page=5更改为http://example.com/myApp/#page=1 ,但我不知道如何检测发生了变化。

如果我检测到一个变化,一些JavaScript会作用于它。

HTML5引入了一个hashchange事件,它允许你注册url哈希变化的通知,而不用用定时器轮询它们。

它支持所有主stream浏览器(Firefox 3.6,IE8,Chrome,其他基于Webkit的浏览器),但我仍然强烈build议使用一个库来处理事件 – 即在浏览器中使用定时器,而不支持HTML5事件,否则使用事件。

有关该事件的更多信息,请参阅https://developer.mozilla.org/en/dom/window.onhashchange和http://msdn.microsoft.com/en-us/library/cc288209%28VS.85%29。; aspx 。

使用setTimeout / interval定期检查当前地址:

  var oldLocation = location.href; setInterval(function() { if(location.href != oldLocation) { // do your action oldLocation = location.href } }, 1000); // check every second 

您应该扩展位置对象以公开您可以绑定的事件。

即:

 window.location.prototype.changed = function(e){}; (function() //create a scope so 'location' is not global { var location = window.location.href; setInterval(function() { if(location != window.location.href) { location = window.location.href; window.location.changed(location); } }, 1000); })(); window.location.changed = function(e) { console.log(e);//outputs http://newhref.com //this is fired when the window changes location } 

SWF地址是这些types的东西的优秀库。