如何监控url中的更改(片段标识符 - URL的锚点部分)

时间:2009-11-01 15:13:11

标签: javascript jquery html url uri-fragment

我正在创建一个倾向于在一个页面中处理所有请求的网站(Ajax)。 所以我认为我可以捕获每个用户点击一个链接,并检查 IF 它在我的网站上我做了一些关于 JavaScript 的事情,比如一个ajax请求,例如 ELSE 它会像往常一样打开链接!

在window.location上做手表不起作用! 而且我不知道是否还有#符号之后的url部分。 注意:GMail和Facebook都是我猜的!他们使用这样的东西:
http://mail.google.com/mail/ #inbox
http://www.facebook.com/home.php #/ inbox /?ref = mb

请考虑:我喜欢在我的项目中使用jQuery,因此使用它的任何解决方案都是首选。

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

URL的片段部分用于在启用AJAX的网站上启用导航历史记录(后退和前进按钮)。如果你想“捕获”点击链接,既然你正在使用jQuery,你可以这样做:

$('a').click(function()
{
   var item = $(this);
   var url = item.attr('href');
   // your logic here
});

如果你在AJAX星座中使用片段(window.location.hash),请注意IE6在AJAX请求中提交url的片段部分,这可能导致非常难以调试的bug,所以要注意这一点。

答案 1 :(得分:4)

这是另一个好读:Restoring Conventional Browser Navigation to AJAX Applications

摘自文章:

  

许多开发人员采用AJAX作为   开发丰富的Web应用程序的方法   这几乎是互动的   响应式桌面应用程序。   AJAX的工作原理是将Web UI划分为   不同的细分。用户可以执行   对一个段进行操作然后   开始研究其他细分市场   没有等待第一个   操作完成。

     

但是AJAX有一个主要的缺点;它   打破标准的浏览器行为,例如   作为后退,前进和书签   支持。而不是强迫用户   适应AJAX的缺点,   开发人员应该制作他们的AJAX   应用符合   传统的网络互动   风格,.......

答案 2 :(得分:4)

在最近的浏览器窗口上调度了hashchange事件。

答案 3 :(得分:3)

简单:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}

链接: How can you check for a #hash in a URL using JavaScript?

答案 4 :(得分:3)

请参阅@Pekka的How can you check for a #hash in a URL using JavaScript?链接以查看哈希值。只需将该函数放入回调window.setInterval()

即可