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

如何在Android应用中禁用WebView的自动填充流量

Android WebView 自动填充请求拦截与禁用方案

一、从根源禁用自动填充(彻底阻断请求触发)

1. 网页文本框层面(自有页面优先用)

给页面内所有输入框添加autocomplete="off"属性,密码框用autocomplete="new-password"效果更稳定。如果是无法修改的第三方网页,可通过WebView注入JS强制修改:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 遍历所有输入框,强制关闭自动填充相关功能
        view.loadUrl("javascript:(function() { " +
                "var inputs = document.getElementsByTagName('input'); " +
                "for(var i=0; i<inputs.length; i++) { " +
                "inputs[i].setAttribute('autocomplete', 'off'); " +
                "inputs[i].setAttribute('autocorrect', 'off'); " +
                "inputs[i].setAttribute('autocapitalize', 'none'); " +
                "} })()");
    }
});

2. WebView 全局配置

直接关闭WebView的表单保存与自动填充功能:

WebSettings settings = webView.getSettings();
settings.setSaveFormData(false); // 禁止保存表单数据
settings.setAutocompleteOverrideEnabled(false); // 关闭自动完成(适配部分Android版本)
// Android 8.0及以上额外补充
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    webView.setAutofillHints("");
}

3. 应用全局禁用自动填充服务

在AndroidManifest.xml中给WebView所在Activity添加属性:

<activity
    android:name=".YourWebViewActivity"
    android:autofillHints=""
    android:importantForAutofill="no">
</activity>

也可在Activity代码中动态设置:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
}

二、黑名单拦截目标域名(双重保障)

若禁用自动填充后仍有漏网请求,直接拦截content-autofill.googleapis.com:

1. 利用NetworkSecurityConfig配置

在network_security_config.xml中添加黑名单规则:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <!-- 仅允许自有服务域名 -->
        <domain includeSubdomains="true">your-own-service.com</domain>
        <!-- 直接阻断目标域名 -->
        <domain includeSubdomains="true" blocked="true">content-autofill.googleapis.com</domain>
    </domain-config>
</network-security-config>

需确保在AndroidManifest.xml的application标签中引用该配置:android:networkSecurityConfig="@xml/network_security_config"

2. WebViewClient拦截请求

重写shouldInterceptRequest方法,碰到目标域名直接返回空响应:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        if (url.contains("content-autofill.googleapis.com")) {
            // 截断请求,返回空响应
            return new WebResourceResponse(null, null, null);
        }
        return super.shouldInterceptRequest(view, request);
    }
});

3. 应用层网络拦截(如OkHttp)

如果WebView使用自定义OkHttpClient,可添加拦截器拦截目标域名:

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(chain -> {
            Request request = chain.request();
            String url = request.url().toString();
            if (url.contains("content-autofill.googleapis.com")) {
                throw new IOException("Blocked by security policy");
            }
            return chain.proceed(request);
        })
        .build();
// Android 10+ 可通过WebViewAssetLoader将OkHttpClient绑定到WebView

三、管控结论

完全可以实现管控,优先采用禁用自动填充的方案从根源避免请求触发;拦截方案作为兜底保障,双重措施可彻底阻止该域名的请求,满足安全要求。

内容的提问来源于stack exchange,提问作者Rameez Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:27