Android Studio WebView自动填充后点击登录字段清空问题求助
WebView自动填充后登录字段被清空的解决办法
这种情况大概率是因为直接通过JS给输入框赋值后,没有触发页面表单的input或change事件,导致页面的表单绑定/验证逻辑没识别到值已变更,点击登录时就会清空这些字段。以下是几个可行的解决思路:
赋值后手动触发输入事件
把两次loadUrl合并成一次,赋值后主动触发input事件(多数前端框架会监听这个事件更新绑定值),代码修改如下:public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); web.loadUrl("javascript:(function() { // 处理邮箱字段 var emailInput = document.getElementById('id_userLoginId'); emailInput.value = 'iemoppea798@hamham.uk'; emailInput.dispatchEvent(new Event('input', { bubbles: true })); // 处理密码字段 var pwdInput = document.getElementById('id_password'); pwdInput.value = '889988'; pwdInput.dispatchEvent(new Event('input', { bubbles: true })); })()"); System.out.println("AUTOFILL"); }模拟手动逐字符输入(应对反自动填充逻辑)
有些网站会检测输入速度判断是否是自动填充,这时候可以模拟手动输入的间隔,逐个字符填入并触发事件:public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); web.loadUrl("javascript:(function() { function simulateInput(el, text) { el.value = ''; let charIndex = 0; function typeChar() { if (charIndex < text.length) { el.value += text[charIndex]; el.dispatchEvent(new Event('input', { bubbles: true })); charIndex++; setTimeout(typeChar, 100); // 模拟100ms间隔的手动输入 } } typeChar(); } simulateInput(document.getElementById('id_userLoginId'), 'iemoppea798@hamham.uk'); simulateInput(document.getElementById('id_password'), '889988'); })()"); System.out.println("AUTOFILL"); }关闭WebView自带的表单保存功能
避免系统自带的自动填充和你的自定义逻辑冲突,在WebView初始化时添加:WebSettings webSettings = web.getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false);
内容的提问来源于stack exchange,提问作者Games Shop
相关产品推荐
相关产品推荐

