当前位置:  开发笔记 > 编程语言 > 正文

如何使用JavaScript检测地址栏更改?

如何解决《如何使用JavaScript检测地址栏更改?》经验,为你挑选了3个好方法。

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

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

当用户操作站点时,地址栏可以更改为类似的内容

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

无需重新加载页面.

我的问题是以下顺序:

    用户为第一个URL添加书签.

    用户操纵应用程序,使得第二个URL是当前状态.

    用户单击在步骤1中创建的书签.

    地址栏中的网址从http://example.com/myApp/#page=5更改为http://example.com/myApp/#page=1,但我不知道如何检测变化发生了.

如果我检测到某个更改,JavaScript会对其进行操作.



1> ThiefMaster..:

HTML5引入了一个hashchange事件,它允许您注册url哈希更改的通知,而无需使用计时器轮询它们.

它得到了所有主流浏览器(Firefox 3.6,IE8,Chrome,其他基于Webkit的浏览器)的支持,但我仍然强烈建议使用一个为您处理事件的库 - 即在不支持该浏览器的浏览器中使用计时器HTML5事件,否则使用事件.

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



2> user187291..:

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

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


是的,我希望有一个隐藏的事件或其他东西.以某种方式使用间隔对我来说似乎并不"正确".谢谢.

3> Skawful..:

您应该扩展location对象以公开可以绑定到的事件.

即:

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
}

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有