为什么国内的大型网站都在滥用 target="_blank"

也可能最近才注意到这个事情,发现国内各大主流网站全部在滥用 a 标签的 target="_blank" 属性,我最近试了很多个网站,包括但不仅限于 哔哩哔哩网易新浪网腾讯网今日头条等。这个是相当烦人的,我在这些网站上点击任意一个连接,全部是打开新的标签页或者窗口,浏览下来不一会就全是标签页。我在想,国内的这些人一点都不注重用户体验吗?这么害怕用户从网页跳走吗?难道不知道如果用户想在新标签页打开可以在连接上按一下鼠标滚轮吗?不知道用户想在新标签页打开可以按住 Command + 点击 吗?真的觉得很多国内的厂商都是臭不要脸,类似于像开屏广告以及各个视频平台的广告一样,玩出各种花来,为的是从用户身上挖出剩余价值,什么用户体验,都是次要的,反正你有离不开我。

今天真是越想越气不过,花了点时间写了个油猴脚本来解决这个问题:

原理其实也很简单,就是在网页在加载完之后列出所有 target="_blank"a 元素,判断它的 host,如果和当前的网址是一样的 host,就去除 target 属性。另外很多网站都是懒加载的,所以要通过 MutationObserver 来观察这些新加的 a 元素以及中途把 target 设为 _blank 的元素,用相同的逻辑将 target 属性移除掉。当时在处理网易的时候遇到了一个问题,不管怎么弄都是打开新的标签页,而且我看也没有 target="_blank" 属性啊!后来仔细观察发现,它在 head 中放入了 base 标签:<base target="_blank" />,效果其实是一样的,还省的在每个 a 元素中添加 target="_blank" 了。解决办法也很简单粗暴,直接找到这个元素并移除。除此之外,网易还有一个恶心的问题,在 www.163.com 上的连接指向 news.163.com,在 news.163.com 上的连接指向 www.163.com

刚才发现之前的脚本在头条上无法工作,研究后发现其恶心的是给 document 增加了 click 事件监听器,在监听器里强制点链接在新窗口中打开,你不仁也不能怪我不义了,只能替换你的 addEventListener 方法了。

我实在想不通他们都是怎么想的,我看完新闻、咨询、视频等,我点开另外一个连接我为什么还要保留当前的网页?留着占内存吗?不知道他们自己用不用,自己觉不觉得烦!总之以后清净了~。