Android WebView无法正常加载wolt登录页https://wolt.com/sk/login求助
Android WebView无法加载wolt.com登录页面的问题解决
我尝试在Android应用中加载https://wolt.com/sk/login页面并实现自动登录,但该URL无法在WebView中正常加载。我也尝试使用Android-AdvancedWebView,问题依旧。以下是我的WebView配置代码:
WebSettings webSettings = webView.getSettings(); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.getSettings().setSupportZoom(true); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setDisplayZoomControls(false); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setScrollbarFadingEnabled(false); if (android.os.Build.VERSION.SDK_INT >= 21) { CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true); } else { CookieManager.getInstance().setAcceptCookie(true); } webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); String ua = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0"; webView.getSettings().setUserAgentString(ua); webSettings.setDomStorageEnabled(true); webSettings.setJavaScriptEnabled(true); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setDomStorageEnabled(true); // enable DOM storage webView.getSettings().setAllowFileAccess(true); // allow access to file system webView.getSettings().setAllowFileAccessFromFileURLs(true); // allow access to file system from file URLs webView.getSettings().setAllowUniversalAccessFromFileURLs(true); // allow access to file system from any URLs webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setSupportZoom(false); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true); WebViewClientImpl webViewClient = new WebViewClientImpl(this); webView.setWebViewClient(new WebViewClient() { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); Log.i("webview", "loading: deprecation"); return true; //return super.shouldOverrideUrlLoading(view, url); } @Override @TargetApi(Build.VERSION_CODES.N) public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); Log.i("webview", "loading: build.VERSION_CODES.N"); return true; //return super.shouldOverrideUrlLoading(view, request); } @Override public void onPageStarted( WebView view, String url, Bitmap favicon) { Log.i("webview", "page started:"+url); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, final String url) { Log.i("webview", "page finished:"+url); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError er) { handler.proceed(); } }); webView.setWebChromeClient(new WebChromeClient()); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); webView.loadUrl("https://wolt.com/sk/login"); // use cookies to remember a logged in status cookieManager.setAcceptCookie(true);
以下是针对性的修复建议:
- 清理重复配置:移除代码中重复的设置项(如两次
setJavaScriptEnabled(true)、先开启缩放后关闭的冲突配置),避免配置逻辑冲突。 - 更新User-Agent:当前使用的老旧Firefox UA可能被网站拦截,建议使用系统默认UA或贴近现代浏览器的UA:
String ua = webView.getSettings().getUserAgentString() + " YourAppName/1.0"; webView.getSettings().setUserAgentString(ua); - 修正URL拦截逻辑:当前强制拦截所有URL并重新加载会破坏页面跳转逻辑,仅拦截非HTTP/HTTPS的自定义Scheme链接即可:
@SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (!url.startsWith("http://") && !url.startsWith("https://")) { // 处理自定义Scheme逻辑 return true; } return super.shouldOverrideUrlLoading(view, url); } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); if (!url.startsWith("http://") && !url.startsWith("https://")) { // 处理自定义Scheme逻辑 return true; } return super.shouldOverrideUrlLoading(view, request); } - 规范Cookie与存储配置:简化Cookie设置逻辑,补充低版本Android的数据库路径配置:
webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { webSettings.setDatabasePath(getApplicationContext().getFilesDir().getPath() + "/databases"); } CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true); - 修复SSL错误处理:避免直接忽略SSL错误,添加用户确认逻辑保障安全:
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError er) { new AlertDialog.Builder(view.getContext()) .setTitle("SSL证书异常") .setMessage("该网站证书存在问题,是否继续访问?") .setPositiveButton("继续", (dialog, which) -> handler.proceed()) .setNegativeButton("取消", (dialog, which) -> handler.cancel()) .show(); } - 确认网络权限:确保Manifest中已添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者ivusosk ivusosk
相关产品推荐
相关产品推荐

