V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
woshinide300yuan
V2EX  ›  JavaScript

js 有办法是别:visited 链接,然后进行屏蔽吗?

  •  
  •   woshinide300yuan · 2021-05-09 12:18:37 +08:00 · 2321 次点击
    这是一个创建于 1298 天前的主题,其中的信息可能已经有所发展或是发生改变。
    //获取所有的块
    var img_sections = document.getElementsByClassName('l7cibp-2 mHtZd');

    //遍历所有的块
    for (var i=0, len=img_sections.length|0; i<len; i=i+1|0) {
    //获取块里的文字条
    var text_bars = img_sections[i].getElementsByClassName('iasfms-4 hegAwd');
    //获取文字条的背景色
    var bgcolor = window.getComputedStyle(text_bars[0]).getPropertyValue("background-color");
    //alert 用来 debug 背景色的值是什么
    alert(bgcolor);

    //判断背景色不是 rgb(0, 0, 0) 纯黑
    if(bgcolor != 'rgb(0, 0, 0)')
    {
    //debug
    alert("q1123213");
    //不是纯黑就把图字块隐藏起来
    img_sections[i].style.display='none';
    }
    }


    - - 搞完了发现,visited 并不是网页 CSS 里的样式区分的。所以在上述代码眼里,全都是一样的。无法做到“ 不是纯黑就把图字块隐藏起来 ” ,都是全黑……
    16 条回复    2021-05-10 09:16:17 +08:00
    codehz
        1
    codehz  
       2021-05-09 12:25:56 +08:00 via Android   ❤️ 1
    浏览器普遍做了特殊处理,没法通过一般正常途径拿到 visited 信息,目前有一种思路是做一个基于时间的侧信道攻击拿到颜色(不过也被堵的差不多了,以前的 mix-blend-mode 方法成功率不高
    opengps
        2
    opengps  
       2021-05-09 12:31:30 +08:00   ❤️ 1
    应该不行,标记访问过是浏览器的一个识别能力。
    这个功能得看浏览器的历史访问地址里是否出现过,然而似乎没找到浏览器对外提供这个接口
    rekulas
        3
    rekulas  
       2021-05-09 12:37:36 +08:00   ❤️ 1
    visited 属于个人隐私无法识别
    除非配合访问的链接后端一起处理可以判断
    woshinide300yuan
        4
    woshinide300yuan  
    OP
       2021-05-09 13:23:37 +08:00
    谢谢大家,已然放弃。
    luob
        5
    luob  
       2021-05-09 13:38:50 +08:00   ❤️ 1
    document
    .getElementsByClassName('l7cibp-2 mHtZd')
    .map(section => {
    section
    .getElementsByClassName('iasfms-4 hegAwd')
    .addEventListener('click', () => {
    section.setAttribute('data-text-visited', true)
    })
    }



    .l7cibp-2.mHtZd[data-text-visited] {
    display: none;
    }


    这样行吗?
    luob
        6
    luob  
       2021-05-09 13:41:16 +08:00   ❤️ 1
    打了半天空格怎么还是吞成了这个鬼样子……中间还有写错的,反正就是这么个意思凑活着看吧
    lichdkimba
        7
    lichdkimba  
       2021-05-09 13:58:25 +08:00   ❤️ 1
    不然网站放个别的网站的地址就能检测到用户访问过没有了、、
    love
        8
    love  
       2021-05-09 14:32:30 +08:00   ❤️ 1
    为何要屏蔽 visited 链接?
    有些站我要标识哪些是我看过的,我都是用 Stylus 给 visited 链接加特别的顔色
    szharrydev
        9
    szharrydev  
       2021-05-09 20:15:52 +08:00   ❤️ 1
    document.querySelectorAll('a.l7cibp-2 mHtZd:visited')
    mostkia
        10
    mostkia  
       2021-05-09 21:36:20 +08:00
    可以换个折中的思路,访问的链接一定是被点击激活的,可以为每个链接绑定一个点击事件,首先阻止默认的跳转,然后设置一个 cookie,吧每次点击的 href 存储到 cookie,随后再放行,下次刷新回到本页面后,首先查找这个 cookie 数据,看看有哪些链接记录在案,随后遍历页面所有的锚点,匹配的直接隐屏蔽就行了。
    jinliming2
        11
    jinliming2  
       2021-05-10 00:01:13 +08:00   ❤️ 1
    @szharrydev :visited 伪类貌似是可以设置样式,但是无法被 querySelector 选择到的,computedStyle 里获取到的也是非 :visited 的样式。
    woshinide300yuan
        12
    woshinide300yuan  
    OP
       2021-05-10 00:11:07 +08:00
    @luob 哈哈哈哈哈……谢谢你
    woshinide300yuan
        13
    woshinide300yuan  
    OP
       2021-05-10 00:11:33 +08:00
    @mostkia 能理解,但不会,哈哈…… 谢谢您啦。
    woshinide300yuan
        14
    woshinide300yuan  
    OP
       2021-05-10 00:12:15 +08:00
    @love 有时候页面太多,太密集,想直接屏蔽掉,不想肉眼余光去费神挑选,眼压太大了。嘻嘻~
    Mutoo
        15
    Mutoo  
       2021-05-10 07:09:28 +08:00
    由于 :visited 涉及用户隐私(浏览记录),浏览器默认把所有链接认为是 unvisited,于是 querySelector(':visited') 不会起作用。
    yunyuyuan
        16
    yunyuyuan  
       2021-05-10 09:16:17 +08:00
    这属于属于隐私了,想想你进一个网站,上面有个 p**nhub 链接,是:visited,别人就知道你上过 p 站了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3249 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:58 · PVG 20:58 · LAX 04:58 · JFK 07:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.