CSS

Privacy and the :visited selector

隐私和访问选择器

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

为了缓解这个问题,Gecko 2已经做了一些修改,以限制访问链接可以获得的信息量。

善意的小谎言

第一个变化就是在某些情况下,Gecko会欺骗网络应用程序。特别是,getComputedStyle()类似的功能,例如element.querySelector()总是返回值,表示用户从未访问过任何页面上的链接。

另外,如果你使用一个同级连接器,例如:visited + span,在<span>将作为如果该链接是未访问过的风格。

而且,在极少数情况下,如果使用嵌套的链接元素,并且正在匹配的元素与正在测试历史记录中的链接不同,则该元素被绘制为就像该链接未被访问一样。

访问链接样式的限制

您仍然可以在视觉上对访问过的链接进行样式设置,但现在对可以使用的样式有限制。只有以下属性可以应用于访问过的链接:

  • color

  • background-color

  • border-color (及其子属性)

  • outline-color

  • fillstroke属性的颜色部分

此外,即使您可以为访问链接设置的属性,您也无法更改未访问链接和已访问链接之间的透明度,否则您将无法使用rgba()或使用hsla()颜色值或transparent关键字。

下面是一个使用带有讨论限制的样式的示例:

:link { outline: 1px dotted blue; background-color: white; /* The default value of background-color is 'transparent'. You need to specify a different value, otherwise changes on :visited don't apply */ } :visited { outline-color: orange; /* Visited links have an orange outline */ color: yellow; /* Visited links have yellow colored text */ background-color: green; /* Visited links have a green background */ }

对web开发人员的影响

总的来说,这应该会对web开发人员产生太大的影响。然而,这可能需要对网站进行以下修改:

  • 使用背景图像对链接进行样式设置,并指出它们是否已被访问将不再有效,因为只有颜色可用于对访问的链接进行样式设置。