【问题标题】:List only unvisited links with document.links使用 document.links 仅列出未访问的链接
【发布时间】:2016-05-02 16:41:38
【问题描述】:

我用document.links(带有用户脚本)列出了一些网站底部的所有链接。

已访问和未访问的 url-s 一起出现。我可以为它们设置不同的颜色,以便轻松查看哪些链接是新链接以及我已经访问过哪些链接。但我希望只看到新链接。

有没有办法告诉document.links 只列出未访问的(新)(a:link)链接?

(如果不可能,那我怎么能隐藏访问过的链接?我在a:visited 上尝试过visibility:hidden;display:none;,但没有工作。发现这是privacy related 的事情,但我没有'不想触摸原始页面上的链接,仅在我的链接集合中,这是那些的副本。)

【问题讨论】:

  • 刚刚尝试过document.querySelectorAll("a:visited"),但似乎不起作用……据我所知,您无法可靠地获取这些链接。

标签: javascript css hyperlink userscripts


【解决方案1】:

可能不可能

我不完全确定 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 来显式存储被点击的链接并保持“访问过”的属性,以便您可以识别那些被触摸过的链接:

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';
        }
    }
}

这种方法会将“已访问”类附加到您的元素,并允许您使用纯 CSS 方法显式删除它们:

a.visited { display: none; }

或者通过使用类似于您最初使用的 Javascript 技术:

document.querySelectorAll('a.visited');

使用localStorage 技术的示例

您可以see an example that uses the localStorage technique here(例如,在每次按下按钮后重新加载)及其输出示例如下:

【讨论】:

  • 谢谢。虽然 - 不幸的是 - 这个(本地存储)对我来说不是一个选择,因为在短时间内会有大量链接,这会减慢我猜测的一切(+我的硬盘太慢/太旧)。目前,我将“a:visited”的颜色设置为与给定网站的背景相同。看到一个带有几个链接的大空白空间并不好。我们的想法是让该 div(带有 d.links)仅在新链接可用时出现。
  • 假设您没有在其中存储不必要的大量数据,本地存储不一定会减慢速度。如前所述,:visited 伪类在使用较新的浏览器时可能根本无法工作,因此处理此问题的唯一真正方法是实现一个允许您存储已单击的链接的解决方案。如果您要使用建议的解决方案,您可以轻松地使用 jQuery 来确定 &lt;div&gt; 是否包含任何未访问的列表并相应地显示/隐藏它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2018-07-14
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多