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