Javascript 通过bookmarklet设置访问链接的样式?

Javascript 通过bookmarklet设置访问链接的样式?,javascript,firefox,hyperlink,bookmarklet,Javascript,Firefox,Hyperlink,Bookmarklet,一段时间以来,我广泛使用的一个书签在Firefox中被破坏了。它可能适用于其他浏览器,但我只在Firefox中使用 讨论中的bookmarklet是“隐藏已访问”的 由于这不起作用(正常),我决定亲自动手,结果是: javascript:( function(){ var css=document.createElement('style'); css.type='text/css'; var styles='a%3Avisited{display%3Anone !important}'; cs

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

讨论中的bookmarklet是“隐藏已访问”的

由于这不起作用(正常),我决定亲自动手,结果是:

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);
})();
为便于阅读,将其分成几行,否则将不受我使用内容的修改。
问题是,它确实会将内联样式表附加到头部,只是从来不会改变链接的外观。但是,一旦我删除了
:visted
(或此处显示的
%3avisted
),样式表将应用于链接并将其隐藏,尽管此时无论链接的访问状态如何,显然都会进行隐藏

这里的底线是,我认为
存在问题:访问了
,并且在about:config中翻转了
layout.css.visitored\u links\u enabled
,可以预见,这只是从访问的链接中删除样式。这是不可取的

可能值得注意的是,SquareFreeBookmarklet仍然将其内容附加到头部,它也没有任何效果


我不知所措。我错过了什么,还有通过bookmarklet隐藏已访问链接的可能性吗?

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

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

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

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


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

由于安全原因,
:visited
的行为几年前已更改。
。。。虽然您的代码(以及squarefree bookmarklet)可能在较旧的浏览器上运行,但在最新版本的浏览器中,您将无法获得相同的效果

来自

  • 访问的链接只能有不同的颜色:前景、背景、轮廓、边框、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 */
}

我已经阅读了您提供的第一个链接,但我从未想到它只会禁止某些指令集。虽然链接的颜色选项有效(尽管是
:visted
规则…),但它并没有完全符合我的目的。这就是说,很有趣的是,它确实起作用了,这让我想知道是否还有更多的修补空间。谢谢!:)