为什么我似乎无法结合:访问和::之后?

时间:2016-04-05 06:13:57

标签: css css-selectors

我正在编写一些应该创建一些生成内容的CSS。

.foo:visited::after {
  display: inline;
  content: " visited";
 }

然而,它没有效果。

如果我将选择器更改为.foo::after,则可以正常工作。

同样,.foo:visited的样式也会生效。

Safari网络检查员甚至将:visited::after的样式显示为有效!

为什么我看不到自己生成的内容?

1 个答案:

答案 0 :(得分:2)

浏览器会限制您在访问过的链接上修改的样式,如果您使用JavaScript查询链接的当前颜色,它们甚至会欺骗您。

为什么?

因为否则,您在scumbag-advertising.example.com可以运行一堆JavaScript来查看浏览器历史记录中的哪些网站(或至少是URL)!

有关详情,请参阅:visited on MDNthis longer explanation of how this privacy hole was closed

  

从历史上看,CSS :visited选择器是网站查询用户历史记录的一种方式,可以使用getComputedStyle()或其他技术来浏览用户的历史记录弄清楚用户访问过哪些网站。这可以快速完成,并且不仅可以确定用户在网络上的位置,还可以用于猜测有关用户身份的大量信息。

多年前,浏览器通过限制变化和说谎来修补这个漏洞。