我正在编写一些应该创建一些生成内容的CSS。
.foo:visited::after {
display: inline;
content: " visited";
}
然而,它没有效果。
如果我将选择器更改为.foo::after
,则可以正常工作。
同样,.foo:visited
的样式也会生效。
Safari网络检查员甚至将:visited::after
的样式显示为有效!
为什么我看不到自己生成的内容?
答案 0 :(得分:2)
浏览器会限制您在访问过的链接上修改的样式,如果您使用JavaScript查询链接的当前颜色,它们甚至会欺骗您。
为什么?
因为否则,您在scumbag-advertising.example.com
可以运行一堆JavaScript来查看浏览器历史记录中的哪些网站(或至少是URL)!
有关详情,请参阅:visited
on MDN和this longer explanation of how this privacy hole was closed:
从历史上看,CSS
:visited
选择器是网站查询用户历史记录的一种方式,可以使用getComputedStyle()
或其他技术来浏览用户的历史记录弄清楚用户访问过哪些网站。这可以快速完成,并且不仅可以确定用户在网络上的位置,还可以用于猜测有关用户身份的大量信息。
多年前,浏览器通过限制变化和说谎来修补这个漏洞。