首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测URL中的Back Button/Hash更改

检测URL中的Back Button/Hash更改
EN

Stack Overflow用户
提问于 2008-10-06 01:18:52
回答 6查看 112.1K关注 0票数 62

我刚刚在http://ritter.vg上建立了我的新主页。我使用的是jQuery,但使用的非常少。

它使用AJAX加载所有页面-我将其设置为允许通过检测URL中的散列来添加书签。

代码语言:javascript
复制
 //general functions
 function getUrl(u) {
      return u + '.html';
 }
 function loadURL(u)    {
      $.get(getUrl(u), function(r){
                $('#main').html(r);
           }
      );
 }
 //allows bookmarking
 var hash = new String(document.location).indexOf("#");
 if(hash > 0)
 {
      page = new String(document.location).substring(hash + 1);
      if(page.length > 1)
        loadURL(page);
      else
        loadURL('news');
 }
 else
      loadURL('news');

但是我不能让后退和前进按钮工作。

有没有一种方法可以在不使用setInterval循环的情况下检测后退按钮何时被按下(或检测散列何时发生变化)?当我尝试使用.2和1秒超时时,它挂住了我的CPU。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-06 02:46:03

请改用jQuery hashchange event插件。关于完整的ajax导航,请尝试使用SEO friendly ajax。否则,您的页面在具有JavaScript限制的浏览器中不会显示任何内容。

票数 31
EN

Stack Overflow用户

发布于 2012-12-06 23:49:55

这里的答案都很陈旧。

在HTML5世界中,您应该使用onpopstate事件。

代码语言:javascript
复制
window.onpopstate = function(event)
{
    alert("location: " + document.location + ", state: " + JSON.stringify(event.state));
};

或者:

代码语言:javascript
复制
window.addEventListener('popstate', function(event)
{
    alert("location: " + document.location + ", state: " + JSON.stringify(event.state));
});

后一段代码允许存在多个事件处理程序,而前者将替换任何可能导致难以找到的bug的现有处理程序。

票数 49
EN

Stack Overflow用户

发布于 2011-01-30 22:02:18

HTML5包含了一个比使用hashchange更好的解决方案,这就是HTML5状态管理APIs https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history -它们允许你更改页面的url,而不需要使用哈希!

尽管只有HTML5浏览器才能使用HTML5状态功能。所以你可能想使用像History.js这样的东西,它为HTML4浏览器提供了向后兼容的体验(通过哈希,但仍然支持数据和标题以及replaceState功能)。

你可以在这里阅读更多信息:https://github.com/browserstate/History.js

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/172957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档