Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将链接标记为已访问_Javascript_Css_Hyperlink - Fatal编程技术网

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

使用javascript将链接标记为已访问,javascript,css,hyperlink,Javascript,Css,Hyperlink,如果FF2(至少)在不遵循href的情况下触发onclick处理程序,则它不会将link标记为:visted。我使用onclick从服务器获取数据并修改页面,这里的链接样式似乎很合适。但链接未标记为已访问 是否有跨浏览器的方式将链接标记为已访问?如果失败,是否有方法确定浏览器的a:visited样式并将其应用于链接 感谢所有回复的人 答案似乎是: 是否有跨浏览器的方式将链接标记为已访问? 不,这是不可能的。如果href在浏览器历史记录中,则链接被标识为已访问。 是否有办法确定浏览器的a:访问

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

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

感谢所有回复的人

答案似乎是:

  • 是否有跨浏览器的方式将链接标记为已访问?
    不,这是不可能的。如果href在浏览器历史记录中,则链接被标识为已访问。
  • 是否有办法确定浏览器的a:访问样式?
    不,不仅仅是通过javascript。
应用一个与:visited具有相同定义的类。

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

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

关于你问题的第二部分,我可能会同意Jordan Jones的回答。

我所知道的唯一解决办法是如下所示

例如,您访问的链接是红色的:

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

我还没有测试过这段代码,但它应该可以让你开始,并给你一个想法。如果你运气好的话,那就是粘贴并获胜我还没有研究cookie中可以存储多少内容,性能影响是什么,或者应用了哪些其他限制,请参见我的评论。

是否有办法确定浏览器的a:visted样式

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

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('')}
警报(mys_getLinkColor(顶部位置))
函数mys_getLinkColor(href){
变量x,主体,res=''
x=document.createElement('a')
x、 href=href
body=document.getElementsByTagName('body')[0]
正文.附加子项(x)
if(x.currentStyle){
res=x.currentStyle.color
}
else if(window.getComputedStyle){
res=window.getComputedStyle(x,null).color
}
返回mys_rgbToHexColor(res)}
函数mys_rgbToHexColor(v){
//例如,“rgb(5,2,11)”转换为“#05020b”。所有其他格式返回不变。
变量i
v=v.split(“(”)
如果(!v[1])返回v[0]
v=v[1]。替换(//g',)。替换(//\)/,“”)
v=v.split(',')

对于(i=0;i我是这样做的。只在支持HTML5历史api的环境下工作

// 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意味着“后退”按钮不会受到影响。

我让用户的浏览器确定该定义。我问题的最后一行询问如何访问该定义。是的,很遗憾,我有一个问题,就是有时没有阅读整个问题。嗯,但我仍然不知道如何获取该信息。我想我应该问这个问题作为一个单独的问题。谢谢,这对保存信息很有用。我还不了解的部分(而且我的浏览器知识不是很深,也不是最新的)是如何获取浏览器在默认情况下要应用于的样式:已访问的链接。至少在朦胧的年代,用户可以配置其浏览器,使已访问的链接以不同的颜色显示(例如,处理色盲问题)。我想查询样式信息并将其应用于我的“链接”元素,而不是假设颜色为红色。但我不知道如何做,甚至不知道这是否可行。只需对我自己的答案发表评论。甚至每页一块饼干都有意义。但请小心,不要对此发疯。我不确定视觉成就是否值得。@Doug刚刚看到了y我们的另一条评论——你想要浏览器的默认值吗?我认为在Firefox中,它们“隐藏”在about:config中。你可能可以通过扩展来准备,但不能从网页上(谢天谢地)。;-)对于IE,请勾选此项:您可以始终使用默认值,并希望用户不要更改它们。通常,一个应用程序的一致行为是很好的。如果您坚持默认值,您将被保存。但它不会与100%匹配。哇,它工作得很好。这是我的一个高优先级要求。非常感谢。请注意,您不能再这样做了-在线至少是现代、安全的浏览器……这是由于备受关注的CSS历史泄漏漏洞。有关该问题的更多信息以及如何在FireFox中修复它,请参阅现在您可以使用我在FF 31中检查的javascript操纵浏览器历史。效果非常好!Nathan,是否可以将链接标记为未访问?这将是一个巨大的改进er我拥有的原始用户脚本:新URL必须与当前URL的来源相同;否则replaceState会引发异常:
// 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)