theme: cyanosis
背景:我们某系统,有一个禁止复制的功能,如果没有复制权限,复制的时候会弹出一个toast。本质上就是
document.oncopy = () => { ... }
。有一天,有一个用户反馈说,她一进页面就无限弹出禁止复制的toast,而且是动一下就弹一下,系统根本无法使用
现场复现
用户只是简单的说了几句,大家都表示不可思议,都表示这不可能。最后屏幕共享的时候,果然如此,简直让人怀疑人生。一用鼠标选中了文本,页面就弹出不能复制,大概是这样的表现:
选择文字的时候不手动复制都会触发copy
当时的录屏因为保密原因,不能对外公开。大概的情况就是这样,上面是我知道怎么复现自己本地跑demo录的屏,接下来会用同样的方式以第三者视角来逐步复述当时的问题排查过程
远程控制排查问题
首先打开控制台,把document.copy改写一下
代码语言:javascript复制const cp = document.oncopy.bind(document);
document.oncopy = () => {
console.log(1);
cp();
return false;
}
结果发现,选一下竟然真的还是弹出toast和打印了1
接下来加了个断点,还是会触发,一样的过程,看起来也没啥区别。于是,开始怀疑用户的插件,瞄了一眼,没有任何可疑的插件,然后把她的Chrome扩展全部关掉,依然会复现
初步结论:oncopy行为的触发,和插件无关
此时想起一句话:90%可以通过重启解决,9%可以通过重装解决,1%只能通过买新电脑解决
电脑重启了,继续远程控制。还是一样的问题,我说要不你多打开其他网站试试,任何网站都行。小姐姐还是很耐心的一个个操作给我看:“你看什么页面都ok,就你这有问题”。于是我随便试了几个页面,打开控制台输入oncopy,然后就立刻复现问题:
代码语言:javascript复制document.oncopy = () => {
console.log(1);
return false;
}
"你看呐,所有的页面都有同样的问题~ 你再随便试多几个页面看看" ——其实我在查资料,看看是不是有我知识盲区之外的
第二步结论:任何页面都会有问题,所以问题的根源不在于页面层面的,是更高层面上的
资料也没查到类似的问题,大概无奈的看着她操作了几分钟,我也一句话都没有说,对着电脑发呆。突然萌生一个念头:系统上的个性化设定
check了一下输入法,搜狗,应该无影响。但是,在对方频繁操作中,有一个若隐若现的小logo引起我注意