You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS WebView中"从短信粘贴验证码"触发事件及适配问题排查

解决方案

iOS WebView中Safari的短信验证码自动填充/粘贴操作不会触发标准的paste事件——它是直接将完整验证码写入单个输入框,绕过了常规的粘贴流程,这就是你监听paste无效的核心原因。你可以尝试监听以下事件来捕获这个操作:

1. 监听beforeinput事件

这个事件在内容插入DOM前触发,覆盖了系统级的填充行为,能直接拿到完整的验证码内容:

$(".number-input").bind("beforeinput", function(e) {
    e.preventDefault();
    let text = e.originalEvent.data?.trim() || "";
    if (!text || text.length !== 6) return;

    $(".number-input").each(function(i) {
        $(this).val(text.charAt(i));
        $(this).removeClass("untouched");
    });
});

2. 监听input事件

如果beforeinput不生效,退而求其次监听input事件——当系统把完整验证码塞进单个输入框后,该输入框的内容会触发input事件,你可以从这里提取完整验证码并分配:

$(".number-input").bind("input", function(e) {
    let targetInput = $(e.target);
    let fullCode = targetInput.val().trim();
    if (fullCode.length === 6) {
        e.preventDefault();
        $(".number-input").each(function(i) {
            $(this).val(fullCode.charAt(i));
            $(this).removeClass("untouched");
        });
    }
});

额外优化:配置输入框属性

给所有验证码输入框加上autocomplete="one-time-code",帮助iOS系统更准确识别这是验证码输入区域,可能让填充行为更符合预期:

<input type="text" class="number-input" autocomplete="one-time-code" maxlength="1">

兜底方案

如果上述事件仍不生效,可以尝试监听change事件(输入框失焦时触发),或者定时检查第一个输入框的内容——当检测到6位字符串时自动分配到所有输入框。

内容的提问来源于stack exchange,提问作者O'Niel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:51:31