2009-11-01 35 views
7

我正在制作一个网站,倾向于处理一个页面(Ajax)中的所有请求。 ,所以我认为我可以捕获每一个用户点击一个链接,并检查IF它在我的网站,我做一些事情上的JavaScript例如像一个Ajax请求,ELSE它会打开链接像往常一样!如何监控URL中的更改(片段标识符 - URL的锚点部分)

在window.location上做手表没有工作! 此外,我不知道是否有无论如何得到#符号后的网址部分。 注:无论使用Gmail和Facebook做,我猜!他们使用的是这样的:?
http://mail.google.com/mail/#inbox
http://www.facebook.com/home.php#/收件箱/ REF = MB

笑纳:那我喜欢在我的项目中使用jQuery,所以使用它的任何解决方案都是首选。

任何想法?

+1

@Omar:#之后的部分URL是'hash'。编辑您的问题标题和标签。 :) – 2009-11-01 15:21:42

+4

@ o.k.w:#之后的URL部分称为'片段',而不是散列。 – 2009-11-01 15:22:49

+0

@ o.k.w谢谢,我不是'本地'英语,所以随时纠正它更明显。 – 2009-11-01 15:28:35

回答

4

这里是另一个好读:从文章Restoring Conventional Browser Navigation to AJAX Applications

摘录:

许多开发商都采用AJAX来开发丰富的Web应用程序 是几乎一样的互动和 响应为 方式桌面应用。 AJAX通过将网络用户界面划分为 不同的部分来工作。用户可以在一个分段上执行 操作,然后 开始在其他分段 上工作,而无需等待第一个 操作完成。

但AJAX有一个主要的缺点;它 打破标准浏览器行为,如 作为后退,转发和书签 支持。而不是强迫用户去适应AJAX的缺点, 开发者应该使他们的AJAX 应用符合 传统网络交互 样式,.......

+0

良好的信息,我总是喜欢认真考虑我的网站的可用性。 – 2009-11-01 15:39:12

4

片段网址的一部分用来启用导航(前进和后退按钮)上支持AJAX的网站的历史记录。如果你想“陷阱”点击链接,因为你使用jQuery无论如何,你可能只是这样做:

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

如果您在使用星座碎片(window.location.hash)与AJAX,注意IE6在AJAX请求中提交url的片段部分,这可能会导致非常难以调试的错误,因此请注意这一点。

+0

Ta,正是我所需要的。 – Pool 2009-11-19 13:58:45

3

查看@Pekka的链接How can you check for a #hash in a URL using JavaScript?来查看散列。只需在回调函数中加入window.setInterval()

+0

注意:window.setInterval()可能会杀死性能!我更喜欢使用事件处理程序(特别是jQuery的方式) – 2009-11-01 15:37:33

+0

如果你看看jQuery的hashchange - 它只是一个除了IE8以外的一个setinterval脚本。虽然,这是一个很好的脚本。 – Justin 2009-11-01 23:24:48

+0

哦!我想我可能会为此转储它。 – 2009-11-02 12:11:48

4

对于最新的浏览器,窗口上会发布hashchange事件。

+1

我正在寻找一个向后兼容(如IE6 :()解决方案。 因此,我宁愿监视锚点击。 – 2009-11-01 15:58:53

+4

嗯,http://plugins.jquery.com/project/hashchange做的伎俩:) 。感谢关键字'hashchange' – 2009-11-01 16:02:58

相关问题