推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
woshinide300yuan

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

  •  
  •   woshinide300yuan · May 9, 2021 · 3632 views
    This topic created in 2005 days ago, the information mentioned may be changed or developed.
    //获取所有的块
    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 replies  •  2021-05-10 09:16:17 +08:00
    codehz
    codehz
    May 9, 2021 via Android❤️1
    1
    浏览器普遍做了特殊处理,没法通过一般正常途径拿到 visited 信息,目前有一种思路是做一个基于时间的侧信道攻击拿到颜色(不过也被堵的差不多了,以前的 mix-blend-mode 方法成功率不高
    opengps
    opengps
    May 9, 2021❤️1
    2
    应该不行,标记访问过是浏览器的一个识别能力。
    这个功能得看浏览器的历史访问地址里是否出现过,然而似乎没找到浏览器对外提供这个接口
    rekulas
    rekulas
    May 9, 2021❤️1
    3
    visited 属于个人隐私无法识别
    除非配合访问的链接后端一起处理可以判断
    woshinide300yuan
    woshinide300yuan
    OP
    May 9, 2021
    4
    谢谢大家,已然放弃。
    luob
    luob
    May 9, 2021❤️1
    5
    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
    luob
    May 9, 2021❤️1
    6
    打了半天空格怎么还是吞成了这个鬼样子……中间还有写错的,反正就是这么个意思凑活着看吧
    lichdkimba
    lichdkimba
    May 9, 2021❤️1
    7
    不然网站放个别的网站的地址就能检测到用户访问过没有了、、
    love
    love
    May 9, 2021❤️1
    8
    为何要屏蔽 visited 链接?
    有些站我要标识哪些是我看过的,我都是用 Stylus 给 visited 链接加特别的顔色
    szharrydev
    szharrydev
    May 9, 2021❤️1
    9
    document.querySelectorAll('a.l7cibp-2 mHtZd:visited')
    mostkia
    mostkia
    May 9, 2021
    10
    可以换个折中的思路,访问的链接一定是被点击激活的,可以为每个链接绑定一个点击事件,首先阻止默认的跳转,然后设置一个 cookie,吧每次点击的 href 存储到 cookie,随后再放行,下次刷新回到本页面后,首先查找这个 cookie 数据,看看有哪些链接记录在案,随后遍历页面所有的锚点,匹配的直接隐屏蔽就行了。
    jinliming2
    jinliming2
    May 10, 2021❤️1
    11
    @szharrydev :visited 伪类貌似是可以设置样式,但是无法被 querySelector 选择到的,computedStyle 里获取到的也是非 :visited 的样式。
    woshinide300yuan
    woshinide300yuan
    OP
    May 10, 2021
    12
    @luob 哈哈哈哈哈……谢谢你
    woshinide300yuan
    woshinide300yuan
    OP
    May 10, 2021
    13
    @mostkia 能理解,但不会,哈哈…… 谢谢您啦。
    woshinide300yuan
    woshinide300yuan
    OP
    May 10, 2021
    14
    @love 有时候页面太多,太密集,想直接屏蔽掉,不想肉眼余光去费神挑选,眼压太大了。嘻嘻~
    Mutoo
    Mutoo
    May 10, 2021
    15
    由于 :visited 涉及用户隐私(浏览记录),浏览器默认把所有链接认为是 unvisited,于是 querySelector(':visited') 不会起作用。
    yunyuyuan
    yunyuyuan
    May 10, 2021
    16
    这属于属于隐私了,想想你进一个网站,上面有个 p**nhub 链接,是:visited,别人就知道你上过 p 站了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1352 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 20:08 · PVG 04:08 · LAX 12:08 · JFK 15:08
    ♥ Do have faith in what you're doing.