有什么方法可以重置链接上的访问状态吗?
场景是这样的:在自然拥有大量链接的内部网站上,我们希望链接在一段时间内具有"已访问"状态.因此,我正在寻找一种方法来操纵链接的访问状态.
这可行吗?当然应该是跨浏览器.
ETA:客户端解决方案是完全可以接受的.首选甚至...... :-)
ETA-2:允许使用Cookie.这里没有禁止:-)
当浏览器选择应用:visited
CSS伪类时,链接显示为"已访问" .
重置链接到未访问状态的客户端方式是(以某种方式)清除浏览历史记录.我会非常惊讶地发现有一种便携式方法可以做到这一点.它还有令人不快的副作用,例如削弱历史敏感的智能位置栏的行为,例如Firefox 3中的那种.
正如Drew Noakes建议的那样,服务器端方法是向链接添加一些噪声查询参数,并定期更改查询参数.这只会给出您想要的行为的不正确的近似值.要获得"正确"行为,您需要跟踪每个用户服务器端访问过的页面的历史记录,因此您只能在必要时间之后更改特定页面的噪声参数.
总而言之,实际上尝试"重置链接上的访问状态"可能是一个坏主意.
我认为更好的解决方案是调整页面样式,以便:visited伪类呈现与:link伪类相同.然后保留每个用户访问过的链接的服务器端历史记录,并使用显式visited
类调整链接的显示.
如果您没有方便用户身份,并且不想要求登录,则可以始终使用随机持久性cookie.
我觉得这个想法有点臭.
重置链接访问状态的目的是什么?通知一些新数据可用?也许更像"新"形象的更冗长的形象更合适?
另一方面,如果你真的需要这样做 - 更改URL
所以你只想让"访问"链接在一定时间内看起来不同?如果绕过浏览器的:visited
伪类并只分配自定义类名,这很容易.使用cookies; 他们有内置的到期.
单击链接时设置JavaScript处理程序.伪代码:
function clickHandler(event) { var href = /* (figure out which anchor was clicked and get the href) */ // (you might need to escape the href) setCookie(href, "visited", 5); // set cookie for 5 days }
它会在链接之前运行此功能.
然后,在页面加载时,您可以执行以下操作:
function markVisitedLinks() { var anchors = document.getElementsByTagName("a"); for (var i = 0; i < anchors.length; i++) { if (readCookie(anchors[i].href) == "visited") { anchors[i].className += " visited"; } } }
抓住了setCookie方法和readCookie功能从怪异模式.