Android WebView加载谷歌页面跳转Chrome弹Cookie授权窗如何解决
Android WebView加载谷歌页面相关问题解决方案
1. 解决页面跳转至外部Chrome浏览器的问题
默认未配置WebViewClient时,WebView会将页面跳转请求交由系统默认浏览器处理,因此会跳出应用到Chrome打开。在原有配置基础上新增以下配置即可:
// 原有配置保留 mywebView.getSettings().setJavaScriptEnabled(true); // 新增DOM存储权限,谷歌页面运行需要该配置 mywebView.getSettings().setDomStorageEnabled(true); CookieManager.getInstance().setAcceptCookie(true); CookieManager.getInstance().setAcceptThirdPartyCookies(mywebView, true); // 配置WebViewClient,强制所有链接在当前WebView内加载 mywebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } // 兼容Android 7.0以下系统 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); // 若需要支持页面内JS弹窗、alert等交互,可额外配置WebChromeClient mywebView.setWebChromeClient(new WebChromeClient());
2. 实现自动接受Cookie、跳过确认弹窗
推荐优先使用方案1,无感知且稳定性高,方案2可作为备用。
方案1:提前注入同意Cookie
谷歌的Cookie确认弹窗由全局CONSENT Cookie控制,在加载页面前提前写入同意状态的Cookie,即可直接跳过弹窗:
CookieManager cookieManager = CookieManager.getInstance(); // 域设置为.google.com,有效期设为1年,Cookie值为YES开头即可生效 cookieManager.setCookie(".google.com", "CONSENT=YES+cb.20240101-01-p0.zh-CN+FX+001; Path=/; Max-Age=31536000"); cookieManager.flush(); // 立即将Cookie写入存储,保证加载页面前生效 // 写完Cookie后再调用loadUrl加载谷歌页面 mywebView.loadUrl("https://www.google.com");
方案2:页面加载后注入JS模拟点击同意按钮
如果谷歌后续调整Cookie规则导致方案1失效,可监听页面加载完成事件,注入JS自动点击同意按钮:
在已配置的WebViewClient中新增onPageFinished回调:
mywebView.setWebViewClient(new WebViewClient() { // 原有shouldOverrideUrlLoading实现保留 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 注入JS匹配同意按钮并触发点击,适配多语言的按钮文案 view.evaluateJavascript("javascript: " + "let acceptBtn = document.querySelector('button[aria-label*=\"同意\"], button[aria-label*=\"Accept all\"], div[role=\"button\"]:has-text(\"全部同意\")'); " + "if(acceptBtn) acceptBtn.click();", null); } });
注意:如果后续谷歌调整了页面按钮的属性规则,需要同步更新JS中的选择器逻辑。
内容的提问来源于stack exchange,提问作者Nico Lewis
相关产品推荐
相关产品推荐

