低版本浏览器兼容密码输入框的关键是降级兜底:移除非关键HTML5属性(如autocomplete、pattern),用JS手动校验;修复Android 4.4 WebView光标错位需避免transform、加translateZ(0)或setTimeout聚焦;Safari 9/iOS 9切换可见需用touchend、blur再type赋值。
低版本浏览器(比如 IE9 及以下、Android 4.4 WebView、旧版 Safari)确实不支持 的某些 HTML5 行为,但问题往往不在“密码输入框本身”,而在于你依赖了它附带的新特性——比如 autocomplete、pattern、required、或 CSS 伪类 ::-webkit-textfield-decoration-container 等。老浏览器不报错,但会静默忽略,导致表单验证失效或样式错乱。
IE9 及以下连 type="password" 都渲染异常?
其实不会。所有浏览器都支持基础的 type="password",它早在 HTML2 就存在。真正出问题的是你混用了 HTML5 属性:
-
autocomplete="new-password":IE10+ 才开始部分支持,IE9 完全无视,可能让密码生成器失效 -
inputmode="text"或inputmode="none":仅 Chrome/Edge 76+、Safari 12.1+ 支持,老 Android WebView 直接丢弃 - 用
:valid/:invalid控制边框颜色:IE9 不支持这些伪类,样式不生效
解决办法是降级兜底:删掉非关键 HTML5 属性,用 JS 补验证逻辑。例如把 required 和 pattern 移除,改用 addEventListener('submit', ...) 在提交时手动校验长度和格式。
Android 4.4 WebView 密码框光标错位、无法聚焦
这是系统 WebView 的著名 bug:当父容器有 transform、perspective 或 overflow: hidden 时, 的软键盘弹出后光标定位偏移,甚至点击无响应。