4

一段时间以来,我广泛使用的一个书签在 Firefox 中被破坏了。它可能适用于其他浏览器,但我只在 Firefox 中使用它。

有问题的小书签是squarefree的“隐藏访问过的” 。

由于这不起作用(正确),我决定自己动手并最终得到这个:

javascript:(
function(){
var css=document.createElement('style');
css.type='text/css';
var styles='a%3Avisited{display%3Anone !important}';
css.appendChild(document.createTextNode(styles));
document.getElementsByTagName("head")[0].appendChild(css);
})();

为了可读性,分成几行,否则我正在使用的内容未修改。
问题是,它确实将内联样式表附加到头部,它只是永远不会改变链接的外观。但是,一旦我删除:visited(或%3Avisited此处显示的),样式表将应用于链接并且它们被隐藏,尽管很明显,无论此时它们的访问状态如何,隐藏都已完成。

这里的底线是,我认为存在问题:visited,并且可以预见的是,在 about:config 中翻转 boollayout.css.visited_links_enabled没有任何作用,因为这只会从访问的链接中删除样式。这是不可取的。:)

可能值得注意的是,squarefree 小书签仍然将其内容附加到头部,它也根本没有任何效果。

我很茫然。我错过了什么,是否可以通过小书签隐藏访问过的链接?

4

3 回答 3

4

:visited由于安全原因,几年前的行为已更改......虽然您的代码(和 squarefree 书签)可能适用于旧版浏览器,但您将无法在最新版本的浏览器中获得相同的影响

来自https://blog.mozilla.org/security/2010/03/31/plugging-the-css-history-leak/的注释

  • 访问的链接只能在颜色上有所不同:前景、背景、轮廓、边框、SVG 描边和填充颜色。所有其他样式更改要么通过加载资源或更改文档中样式化内容的位置或大小来泄漏链接的访问性,这可以被检测并用于识别访问过的链接。

其他有用的参考资料:


对于 CSS,您可以尝试以下方法:

a:visited {
    color: white !important; /* It would hide the text if the background is white too */
    /* or some better css approach for your requirement */
}
于 2013-02-27T10:43:19.310 回答
1

我知道您无法再找出哪些链接已被 javascript 访问过。这样做是为了保护用户隐私。出于安全目的,我相信即使尝试为访问过的链接设置样式或创建样式,在当前的任何主要浏览器中都不起作用。

于 2013-02-27T07:20:51.890 回答
1

出于安全原因,浏览器已采取措施防止 JavaScript 读取链接的“已访问”状态。这意味着您通过 CSS 应用于 ":visited" 的任何样式都不会在 DOM 中注册。

您可以更改颜色和文本装饰(可能)之类的内容,用户将在屏幕上看到更改,但 JS 无法读取结果。

为什么它不应用“显示:无”?因为如果浏览器要从页面中删除链接,这可能会改变页面的布局,例如 div 的高度,并提供潜在的侧通道来确定哪些链接已被访问。因此,不会应用“display:none”。

我可以为您的目标建议的最佳解决方案是更改链接颜色以匹配背景颜色,或者修改不透明度。

于 2013-02-27T08:42:29.243 回答