为什么浏览器限制:访问选择器?

时间:2017-03-11 14:16:11

标签: css css3 css-selectors

我了解隐私权问题,但在this article中,Mozilla声称他们对querySelector()getComputedStyle()撒谎。

如果他们已经对网站撒谎,那么为什么将:visited限制为简单的颜色?使用相同的方法仍然无法从网站隐藏完整样式吗?

1 个答案:

答案 0 :(得分:4)

限制可以应用于访问过的链接的样式可以防止它们以getComputedStyle()可以查询的方式影响不相关元素的布局 - 这是在不秘密计算整个页面布局的情况下无法欺骗的内容好像所有链接都是未访问的,这在性能方面会非常昂贵。这与:visited + span之类的内容不再适用(甚至:visited中仍然允许使用的属性)。

考虑这种概念验证,您可以在其中点击链接以切换模拟其访问的类名,并查看:link:visited之间的切换如何影响布局:

var a = document.querySelector('a'),
    p = document.querySelector('p + p');

a.addEventListener('click', function(e) {
  a.className = a.className == 'unvisited' ? 'visited' : 'unvisited';
  console.log('a is now ' + a.className + '; top pos of following p is now ' + p.getBoundingClientRect().top);
}, false);
a.unvisited {
  font-size: 1em;
}

a.visited {
  font-size: 2em; /* A property not normally allowed on :visited */
}
<p><a class="unvisited" href="#">Toggle visitedness</a>
<p>Another paragraph