仅列出 document.links 未访问过的链接
List only unvisited links with document.links
我将所有 link 都列在某些网站的底部 document.links
(使用用户脚本)。
已访问和未访问的 url-s 一起出现。我可以为它们设置不同的颜色,因此很容易看出哪些 link 是新的,哪些是我已经访问过的。但我只想 看新的 links.
有没有办法告诉 document.links
只列出未访问的(新)(a:link
)links?
(如果不可能,那我怎么能隐藏访问过的 links?我已经在 a:visited
上尝试了 visibility:hidden;
和 display:none;
,但没有用。发现它是 privacy related 的东西,但我不想触摸原始页面上的 link,只在我的 link 集合中,它是那些的副本。)
可能不可能
我不完全确定 due to the security issue similar to the one you mentioned in this similar article 导致 :visited
选择器受到严格限制的可能性有多大,这使得在现代浏览器中几乎不可能进行编程访问。
通过 localStorage
解决方法
我想 you could use a workaround similar to the one mentioned in this blog post,它使用 localStorage 显式存储被点击的链接并保留 "visited" 属性,以便您可以识别已被触摸的链接:
function check_visited_links(){
// Access all of the elements that have been visited (from local storage)
var visited_links = JSON.parse(localStorage.getItem('visited_links')) || [];
// Iterate through your links
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
var that = links[i];
// When the link is clicked, store a reference in localStorage to it
that.onclick = function () {
var clicked_url = this.href;
if (visited_links.indexOf(clicked_url)==-1) {
visited_links.push(clicked_url);
localStorage.setItem('visited_links', JSON.stringify(visited_links));
}
}
// Indicate the link was visited by setting it's class
if (visited_links.indexOf(that.href)!== -1) {
that.className += ' visited';
}
}
}
这种方法会将 "visited" class 附加到您的元素,并允许您通过使用纯 CSS 方法显式删除它们:
a.visited { display: none; }
或者使用类似于您最初使用的技术的 Javascript 技术:
document.querySelectorAll('a.visited');
使用localStorage
技术的示例
您可以 see an example that uses the localStorage
technique here(出于示例目的,只需在每次按下按钮后重新加载)及其输出示例如下:
我将所有 link 都列在某些网站的底部 document.links
(使用用户脚本)。
已访问和未访问的 url-s 一起出现。我可以为它们设置不同的颜色,因此很容易看出哪些 link 是新的,哪些是我已经访问过的。但我只想 看新的 links.
有没有办法告诉 document.links
只列出未访问的(新)(a:link
)links?
(如果不可能,那我怎么能隐藏访问过的 links?我已经在 a:visited
上尝试了 visibility:hidden;
和 display:none;
,但没有用。发现它是 privacy related 的东西,但我不想触摸原始页面上的 link,只在我的 link 集合中,它是那些的副本。)
可能不可能
我不完全确定 due to the security issue similar to the one you mentioned in this similar article 导致 :visited
选择器受到严格限制的可能性有多大,这使得在现代浏览器中几乎不可能进行编程访问。
通过 localStorage
我想 you could use a workaround similar to the one mentioned in this blog post,它使用 localStorage 显式存储被点击的链接并保留 "visited" 属性,以便您可以识别已被触摸的链接:
function check_visited_links(){
// Access all of the elements that have been visited (from local storage)
var visited_links = JSON.parse(localStorage.getItem('visited_links')) || [];
// Iterate through your links
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
var that = links[i];
// When the link is clicked, store a reference in localStorage to it
that.onclick = function () {
var clicked_url = this.href;
if (visited_links.indexOf(clicked_url)==-1) {
visited_links.push(clicked_url);
localStorage.setItem('visited_links', JSON.stringify(visited_links));
}
}
// Indicate the link was visited by setting it's class
if (visited_links.indexOf(that.href)!== -1) {
that.className += ' visited';
}
}
}
这种方法会将 "visited" class 附加到您的元素,并允许您通过使用纯 CSS 方法显式删除它们:
a.visited { display: none; }
或者使用类似于您最初使用的技术的 Javascript 技术:
document.querySelectorAll('a.visited');
使用localStorage
技术的示例
您可以 see an example that uses the localStorage
technique here(出于示例目的,只需在每次按下按钮后重新加载)及其输出示例如下: