使用javascript将链接标记为已访问

时间:2009-04-27 23:12:59

标签: javascript css hyperlink

FF2(至少)没有标记为链接:如果它在没有跟随href的情况下触发onclick处理程序,则会被访问。我正在使用onclick从服务器获取数据并修改页面,链接样式在这里似乎是合适的。但该链接未标记为已访问。

是否有跨浏览器方式将链接标记为已访问?如果失败了,有没有办法确定浏览器的a:访问样式并将其应用到链接?

感谢所有回复的人。

看起来答案是:

      
  • 是否有跨浏览器方式将链接标记为已访问?
    不,没有办法做到这一点。如果href在浏览器历史记录中,则链接被标识为已访问。   
  • 有没有办法确定浏览器的a:访问样式?
    不,不是仅通过javascript。

5 个答案:

答案 0 :(得分:18)

我是这样做的。仅适用于支持HTML5历史记录API的browsers

# store the current URL
current_url = window.location.href

# use replaceState to push a new entry into the browser's history
history.replaceState({},"",desired_url)

# use replaceState again to reset the URL
history.replaceState({},"",current_url)

使用replaceState意味着后退按钮不会受到影响。

答案 1 :(得分:3)

我知道的唯一解决方法类似于以下内容。

说,您访问过的链接是红色的:

<a href="#" onclick="someEvent();this.style.color='#ff0000'">link</a>

但这并不意味着当重新加载页面时,链接仍然标记为访问过。

为实现这一目标,我建议给出所有链接ID,这些ID在整个应用程序中是唯一的,或者每页命名空间。在onclick中,您将触发另一种方法,该方法会将链接的ID保存到Cookie中。

最简单的是以逗号分隔的列表,您可以在阅读之前split()。这是重新加载页面时的操作。当它被拆分时,你迭代所有ID并在你的链接上设置颜色。

例如,使用jQuery:

// onclick
function saveID(id) {
  if ($.cookie('idCookie')) {
    $.cookie('idCookie', $.cookie('idCookie') + "," + id);
  } else {
    $.cookie('idCookie', id);
  }
}

// make all links colored
function setVisted() {
  var idArray = $.cookie('idCookie').split(',');
  for (var x=0; x<idArray.length; x++) {
    $('#' + idArray[x]).css('color', '#ff0000');
  }
}

// assign saveID()
$(document).ready(function(){
  $('a').click(function(){
    saveId($(this).attr('id'));
  });
  setVisited();
});

我没有测试过这段代码,但它应该让你开始并给你一个想法。如果你运气好的话,那就是粘贴并赢得。 ;-)我还没有研究你可以在cookie中存储多少以及性能影响是什么,或者其他什么限制适用,也请参阅我的评论。

答案 2 :(得分:1)

应用与定义相同的类:visited。

答案 3 :(得分:1)

严格来说,个别链接没有“访问”状态。这是URL本身被浏览器解释为“访问过”。任何指向浏览器历史记录中URL的链接都将接收CSS中的:visited伪样式定义的样式。

你可以尝试通过将隐藏的iframe的位置设置为所需的URL来伪造它,但这不会强制当前页面重新绘制,所以我怀疑你会看到:访问过的样式更新w / oa刷新。

对于你提问的第二部分,我可能会回答Jordan Jones的回答。

答案 4 :(得分:0)

有没有办法确定浏览器的a:访问样式?

我会说是的,因为访问了当前文档,您可以找到它的链接颜色: -

alert(mys_getLinkColor(top.location))


function mys_getLinkColor(href) {
var x, body, res=''
x = document.createElement('a')
x.href = href
body = document.getElementsByTagName('body')[0]
body.appendChild(x)
if(x.currentStyle) {
   res = x.currentStyle.color
}
else if(window.getComputedStyle) {
   res = window.getComputedStyle(x,null).color
}
return mys_rgbToHexColor(res) }


function mys_rgbToHexColor(v) { 
// E.g. 'rgb(5,2,11)' converts to "#05020b". All other formats returned unchanged.
var i
v = v.split('(')
if(!v[1]) return v[0]
v = v[1].replace(/ /g, '').replace(/\)/, '')
v = v.split(',')
for(i=0; i<v.length; i++) {
   v[i] = Number(v[i]).toString(16)
   if(v[i].length==1) v[i] = '0' + v[i]
}
return '#'+v.join('')}