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

如何在Android WebView中监听Cookie同意API的回调?

Android WebView监听Cookie同意回调的实现方案

核心思路

保留原JS代码中的|| Promise.resolve()容错逻辑(处理consentApi未加载的情况),通过addJavascriptInterface暴露原生方法给JS,在Promise的then回调中触发原生逻辑。

步骤1:创建JS与原生的交互桥梁类

定义一个带@JavascriptInterface注解的类,提供JS可调用的方法:

public class ConsentBridge {
    private final Context mContext;

    public ConsentBridge(Context context) {
        mContext = context;
    }

    @JavascriptInterface
    public void onConsentGranted() {
        // 处理用户同意后的原生逻辑,注意需切回主线程操作UI
        ((Activity) mContext).runOnUiThread(() -> {
            Toast.makeText(mContext, "用户已同意Cookie,可执行后续操作", Toast.LENGTH_SHORT).show();
            // 这里添加你需要的业务逻辑,比如加载特定资源、更新页面等
        });
    }
}

步骤2:配置WebView并注入修改后的JS代码

开启WebView的JS支持,添加交互接口,在页面加载完成后注入修改后的JS:

WebView webView = findViewById(R.id.your_webview_id);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

// 添加JS接口,命名为"AndroidConsentListener",供JS调用
webView.addJavascriptInterface(new ConsentBridge(this), "AndroidConsentListener");

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 注入JS:保留原Promise逻辑,将console.log替换为调用原生接口
        String injectJs = "(window.consentApi?.consent('tidio-chat') || Promise.resolve()).then(() => {" +
                "    AndroidConsentListener.onConsentGranted();" +
                "});";
        webView.evaluateJavascript(injectJs, null);
    }
});

关键说明

  • 原代码中的|| Promise.resolve()是JS层面的容错:如果window.consentApi不存在,直接resolve Promise,确保then回调一定会执行,无需修改这部分逻辑。
  • @JavascriptInterface注解是必须的,否则JS无法调用原生方法。
  • 原生方法中操作UI必须通过runOnUiThread切换到主线程,因为JS调用默认在后台线程。

内容的提问来源于stack exchange,提问作者tw-S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:20