样式访问链接通过书签?

时间:2013-02-27 06:38:06

标签: javascript firefox hyperlink bookmarklet

有一段时间,我广泛使用的书签在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,因为它出现在这里),样式表IS应用于链接并隐藏它们,但显然隐藏已完成,无论其访问状态如何

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

值得注意的是,squarefree bookmarklet仍会将其内容添加到头部,它也没有任何效果。

我不知所措。我错过了什么,是否可以通过书签隐藏访问过的链接?

3 个答案:

答案 0 :(得分:4)

由于安全原因,:visited的行为在几年前发生了变化 ...而您的代码(和无广告书签)可能适用于较旧的浏览器,您赢了'能够在最新版本的浏览器中获得相同的影响

来自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 */
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

为什么不会适用"显示:无"?因为如果浏览器要从页面中删除链接,这可能会改变页面的布局,例如div的高度,并提供潜在的侧面通道来确定哪些链接已被访问过。出于这个原因"显示:无"将不适用。

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