2013-02-27 56 views
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,因为它出现在这里),样式表IS被应用于链接并且它们是隐藏的,尽管显然隐藏是在这个时候完成的,而不管它们的访问状态如何。

这里的底线是我认为:visited存在问题,并且在about:config中翻转layout.css.visited_links_enabled的bool,可以预见的是,它什么也不做,因为这只是简单地从批量访问的链接中删除样式。这是不可取的。 :)

可能值得注意的是,无squarefree书签仍然追加它的东西到头,它也没有效果。

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

回答

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 */ 
} 
+0

我已经阅读了您提供的第一个链接,我从来没有想到它只会禁止某些指令集。虽然您的链接的颜色选项(尽管是':visited'规则...),它并没有完全削减它为我的目的。 也就是说,看到它确实有用是件有趣的事情,它让我想知道是否还有更多修补的余地。谢谢! :) – grimman 2013-02-28 09:08:38

1

我知道你不能找出哪些链接已经被javascript访问过了。这是为了保护用户的隐私。出于安全考虑,我相信即使试图为已访问的链接创建样式或创建样式,也不适用于任何当前的主要浏览器。

1

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

你可以改变颜色和文字修饰(可能),用户会看到屏幕上的变化,但结果不会被JS读取。

为什么不适用“display:none”?因为如果浏览器从页面中删除链接,这可能会改变页面的布局,例如div的高度,并为确定哪些链接已被访问或提供了潜在的辅助通道。出于这个原因,“display:none”将不会被应用。

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