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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:57:05