未检测到的AJAX链接:已访问

时间:2011-03-11 21:00:51

标签: jquery css ajax jquery-mobile browser-history

我注意到a:visited样式不适用于通过JavaScript请求的链接。在标准用户单击时,完全相同的链接注册为访问,立即和后续刷新。我不确定这对jQuery Mobile(我第一次遇到它)是否是唯一的,或者它是否是我不知道的浏览器限制?

5 个答案:

答案 0 :(得分:2)

a:visited匹配任何指向浏览器历史记录中的网址的链接。

如果您使用AJAX取消对URL的导航,则该URL将永远不会在浏览器历史记录中结束。

您可以使用#链接修复此问题。

答案 1 :(得分:2)

如果您希望它与历史记录和访问过的链接样式一起使用,您可能需要更改location.hash。

请注意,Did You Watch Porn网站使基于访问链接的浏览历史隐私漏洞受到欢迎后,浏览器之间的访问链接样式有些不一致。

答案 2 :(得分:1)

仅当链接被“执行”时才会触发

a:visited

指向AJAX调用的链接通常返回'false'(带有散列(<a href="#">link</a>)的解决方案仍返回false,否则用户将跳转到页面顶部)。

这样,链接永远不会被“执行”,因此不被标记为已访问。

答案 3 :(得分:1)

好的,请不要将a元素的href更改为指向其他答案者所说的散列网址 - 这会破坏用户体验。如果他们想要在新窗口中打开,那么它将需要加倍加载,如果你做更改服务器端,它将破坏搜索引擎和js禁用用户。

问题在于,如果您使用哈希将网站升级为RIA(富互联网应用程序),则链接将指向mysite.com/page,但您实际访问mysite.com/#/page,因此您实际上并未访问原文。

这里适当的解决方案是使用HTML5 History API,它允许您直接更改URL并挂钩到URL更改(因此不再需要哈希)。你可以在这里阅读更多关于哈希vs hashbangs与HTML5 History API的利弊: https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling - 它还包含使用HTML5历史记录API升级您的网站的示例代码。

jQuery Mobile计划将来用于HTML5历史API(目前正在进行中),但是现在我建议等待它实现。

答案 4 :(得分:0)

您始终可以通过ajax回调在链接上设置一个类,该回调与a:visited共享样式。