9

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

对 window.location 进行监视没有用!而且我不知道是否有任何方法可以获取 # 符号之后的 url 部分。注意:我猜 GMail 和 Facebook 都会这样做!,他们使用这样的东西:http:
//mail.google.com/mail/ #inbox
http://www.facebook.com/home.php #/inbox/ ?ref=mb

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

有任何想法吗?

4

5 回答 5

4

简单的:

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

链接: 如何使用 JavaScript 检查 URL 中的#hash?

于 2009-11-01T15:17:37.283 回答
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 的片段部分,这可能会导致非常难以调试的错误,因此请注意这一点。

于 2009-11-01T15:20:44.143 回答
4

这是另一本不错的读物:Restoring Conventional Browser Navigation to AJAX Applications

文章摘录:

许多开发人员采用 AJAX 作为开发富 Web 应用程序的一种方式,这些应用程序几乎与桌面应用程序一样具有交互性和响应性。AJAX 通过将 Web UI 分成不同的部分来工作。用户可以对一个段执行操作,然后开始处理其他段,而无需等待第一个操作完成。

但是 AJAX 有一个很大的缺点;它破坏了标准的浏览器行为,例如后退、前进和书签支持。与其强迫用户去适应 AJAX 的缺点,不如让他们的 AJAX 应用程序符合传统的 web 交互风格,......

于 2009-11-01T15:25:09.453 回答
4

hashchange对于最新的浏览器,窗口上调度了一个事件。

于 2009-11-01T15:41:23.120 回答
3

请参阅@Pekka 的链接如何使用 JavaScript 检查 URL 中的#hash?查看哈希。只需将该函数放入回调中即可window.setInterval()

于 2009-11-01T15:27:57.730 回答