spellcheck="false"在ios微信内置浏览器中完全生效,是解决红波浪线、卡顿、光标错位等问题的必要手段;需正确作用于当前可编辑元素,并配合type、autocomplete、inputmode等属性使用。

不会失效,spellcheck="false 在 iOS 微信内置浏览器(WKWebView)中完全生效,且是解决密码/Token/ID 类输入框红波浪线、卡顿、光标错位等问题的必要手段。
为什么有人觉得它“失效”?
常见误解源于三类混淆:
- 把
spellcheck和系统级键盘设置混为一谈:iOS 微信不读取系统「检查拼写」开关,只响应 HTML 层面的spellcheck属性;关掉系统设置没用,不加这个属性才真没用 - 加在了错误的元素上:比如给
<div contenteditable="true"> 加了 <code>spellcheck="false",但实际聚焦的是其子<input>—— 属性必须落在**当前可编辑且正在接收输入的元素**上 - 搭配了冲突属性:例如同时写了
autocomplete="off"(已被现代浏览器忽略)或autocapitalize="sentences",会触发 iOS 键盘的智能行为覆盖,让spellcheck看似“没起作用” -
type="password":语义正确,触发基础安全遮罩 -
autocomplete="current-password"或"new-password":避免 Chrome/Safari 在聚焦时扫描历史记录导致卡顿 -
spellcheck="false":禁用词典查询与波浪线渲染 -
inputmode="text":强制弹出纯文本键盘(而非符号键盘),减少回删延迟 -
<textarea spellcheck="false"></textarea>可直接使用,无需额外 hack - 对
contenteditable元素(如富文本编辑器容器),必须确保属性写在**实际接收焦点的元素上**,而不是它的父 wrapper - iOS 微信中,
contenteditable若未设spellcheck="false",会默认启用拼写检查,且无法通过 CSS 隐藏波浪线(text-decoration: none无效)
密码输入框必须配齐这四个属性
仅 spellcheck="false" 不够。iOS 微信中一个典型的密码输入框应同时声明:
缺任意一项,都可能在 iOS 微信里出现聚焦卡顿、光标消失、键盘布局错乱等现象。
textarea 和 contenteditable 元素要单独处理
spellcheck="false" 对 <textarea></textarea> 和 contenteditable 元素同样有效,但要注意:
最容易被忽略的一点:微信内嵌 WebView 的 spellcheck 行为不依赖用户是否登录、是否开启“阅读模式”或是否使用“极速模式”,它只认 HTML 标签里的布尔属性值——写上就生效,漏写就默认开启。别信“微信屏蔽了这个属性”的传言,那是没写对位置或没配全配套属性。











