上周末客户突然报告了一个奇怪的 bug:删除用户时,会自动进入搜索结果页。我在我本地试了一下,100% 复现,相当诡异。经过仔细观察,我发现点击删除用户的按钮时,地址栏会发生变化,在新的路由下,会搜索当前用户:
反复重试之后,我认为:是浏览器自动完成的锅。因为删除用户的操作非常敏感,所以我们要求管理员必须输入密码作为校验。而这个界面与常见的用户登录界面非常相像,所以浏览器自作聪明,找了一个 它认为是 用户名的地方填入了用户名,而这个文本框刚好是全局搜索的搜索框:
当其中的内容发生变化时(也即触发了 change
事件),就会跳转到 /search?{key}={query}
,然后开始搜索。
问题找到后,接下来进入修问题时间。由于是浏览器的锅,Web 前端难以直接触及,所以很难修。经过反复艰难的 Google,终于在这个页面找到了答案:https://support.google.com/chrome/thread/9498749?hl=en(3楼),原来 autocomplete
不止有 on
和 off
两个可选值,还可以是 username
、email
、或 password
,等。(详见 MDN The HTML autocomplete attribute。)于是我尝试给真正的 username
输入框加上 autocomplete
属性,果然问题解决了。
看来以后有时间得再研究一下 autocomplete
属性了,说不定能解决之前为了防止自动补全而做的各种 hack。
欢迎吐槽,共同进步