CSS中:visited的隐私保护
CSS 伪类 (Pseudo-classes)
锚伪类:在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访问状态,和鼠标悬停状态。
a:link
{color: #FF0000} /* 未访问的链接 */a:visited
{color: #00FF00} /* 已访问的链接 */a:hover
{color: #FF00FF} /* 鼠标移动到链接上 */a:active
{color: #0000FF} /* 选定的链接 */
对于a标签的使用经常通过伪类来改变样式,比如hover悬停后的background背景,font-size字体大小,text-decoration文本样式(none去下划线),color字体颜色等,但是在:visited下却无法改变这么多样式。
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7 .fi:hover{ 8 text-decoration: none; 9 color: green; 10 font-size: 20px; 11 background-color: red; 12 border: 1px solid black; 13 } 14 .se:visited{ 15 text-decoration: none;/*无效*/ 16 color: green; 17 font-size: 20px;/*无效*/ 18 background-color: red; /*这个按理来说应该有效*/ 19 border: 1px solid black;/*无效*/ 20 } 21 </style> 22 </head> 23 <body> 31 <a href="#qwe" class="fi">123465</a><br /> 32 <a href="#aasd" class="se">7890</a> 33 </body> 34 </html>
原因在于:visited的privacy concerns隐私保护。原文链接
许多年前,CSS:visited曾是一种查询用户历史记录的途径,它自身并没有什么威胁,但是当其与js中的getComputedStyle()联合,便可以通过你的历史记录找到你去过哪里。其速度可达到210,000 URLs每分钟,那么就有可能获得你大量的历史信息或者通过指纹打印复制你的身份。由于浏览器可以保存很长一段时间的历史记录,这种方法可以暴露你相当一部分浏览信息。😒(不该看的别看)。
哇靠,那群牛逼的人当让不想让别人看到自己天天在哪些网上下资源啦,所以他们开始着手保护用户ziji的隐私。好吧,他们是这么做的。
- 将getComputedStyle方法变性,总是返回values就好像用户从没访问过这个网站。(不过我没试过这到底是个什么东西。)
- 将:visited阉割,只能用于修改color,background-color,border-*-color,outline-color,以及部分的fill和stroke属性,其他属性则被:link代替。并且不能用rgba(),hsla(),transparent这些颜色。
翻译的有错误的地方,欢迎来打我脸。😶