移除知乎的登录弹窗
目录
TL;DR⌗
将以下过滤规则加入到你的广告过滤器里:
! 屏蔽滚动页面时右下角弹出的刘看山登录提示框
zhihu.com#%#originalEvent = document.addEventListener
zhihu.com#%#document.addEventListener = (event,listener,useCapture)=>{event!="DOMContentLoaded"?originalEvent(event,listener,useCapture):listener.toString().length<1000?originalEvent(event,listener,useCapture):originalEvent(event,function e(){originalScroll=window.addEventListener;window.addEventListener=(event,listener,useCapture)=>{event!="scroll"?originalScroll(event,listener,useCapture):listener.toString().length==177?null:originalScroll(event,listener,useCapture)};listener()},useCapture)}
探究过程⌗
知乎最新的模态提示框不再加载自 signflow.js
(使得在之前的时候,你可以简单的屏蔽对应 JS 的网络请求来干掉登录模态框)。通过反查刘看山模态提示框的图片资源,发现这部分登录逻辑与主网站的 js 绑定在一起,屏蔽会导致知乎主站无法正常加载。
同时,新的模态框使用随机 CSS 类名,无法按类型名屏蔽。
但是…⌗
谁说广告屏蔽器只能按 CSS 类名屏蔽的?
虽然你的 CSS 类名是随机的,但是你的 style
是固定不变的。那我直接按照你类的 style
特征屏蔽不就好了吗?
花费五分钟,写好了弹窗屏蔽规则,实验成功。
为了实现完美的效果,逆向了一下知乎的前端 JS,并针对性写了一段脚本来处理这个麻烦的弹出框1。简单来说,我通过:
- 劫持浏览器的
window.addEventListener
函数,并替换为自定义的版本; - 在自定义的处理函数中,判断
listener
中的函数是否用于加载登录弹窗。如果是,则拒绝将其添加到浏览器事件中。
来从源代码层面上解决弹窗问题2。
不足⌗
- 右上角的登录模态框依然会弹出。但是,如果你在页面完全加载完毕前向下滚动,它就不会弹出。可以近似忽略它的存在。
阅读其他文章