Skip to main content
 首页 » 编程设计

jquery之区分 jquery 地址插件中的后退/前进

2026年07月24日11飞鱼

从文档 ( http://www.asual.com/jquery/address/docs/ ) 中可以看出,该插件有一个事件来检测何时按下浏览器的后退/前进按钮。

$.address.externalChange(fn)

我的问题是是否有办法知道何时按下后退以及何时按下前进。例如,这在两种情况下都有效:

$.address.externalChange(function() { console.log('back/forward pressed'); }); 

谢谢。

请您参考如下方法:

据我所知,没有历史记录插件可以检测到底按下了哪个浏览器按钮。

您能做的最好的事情就是保留访问过的页面的历史记录,然后检查新页面在历史记录中是否比当前页面更早。当在没有后退/前进按钮的情况下重新访问页面时,您可能会使用以下代码得到错误的结果。

未经测试的示例代码:

var visitedPages = [$.address.path()]; 
var currentPage = $.address.path(); 
 
$.address.internalChange(function() { 
   visitedPages.push($.address.path()); 
}); 
 
$.address.externalChange(function() { 
   var newPage = $.address.path(); 
   var currentPageIndex = -1; 
   var newPageIndex = -1; 
 
   for (var i = 0; i < visitedPages.length; i++) { 
      if (visitedPages[i] == currentPage) currentPageIndex = i; 
      if (visitedPages[i] == newPage) newPageIndex = i; 
   }  
 
   if (newPageIndex == -1 || currentPageIndex == -1) { 
      console.log("unkown button pressed"); 
   } else { 
      if (newPageIndex > currentPageIndex) { 
          console.log('forward pressed');  
      } else 
      if (newPageIndex < currentPageIndex) { 
          console.log('back pressed');  
      } else { 
          console.log('page reloaded?'); 
      } 
   } 
});