首页 > 解决方案 > Android webview不加载会话数据

问题描述

我有一个使用 webview 加载网站的 android 应用程序。在我的网站登陆页面中,我有一个表单,用户在其中输入代码编号,根据该代码编号,我将重定向到我网站的特定 URL。在我的网站上效果很好。所做的是将代码存储在与该 url 的会话中,当同一个用户再次加载我的网站时,它会自动将其重定向到该页面。但是当我使用我的 android 应用程序尝试这种情况时,似乎会话数据不起作用。谁能帮我吗?

这是我的代码:

package com.myPackageName;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Message;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    WebView myweb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myweb = findViewById(R.id.myWebView);

        WebSettings myWebSettings = myweb.getSettings();
        myWebSettings.setJavaScriptEnabled(true);
        myWebSettings.setSupportMultipleWindows(true);
        myWebSettings.setBuiltInZoomControls(true);
        myweb.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        myweb.getSettings().setAppCacheEnabled(true);

        myWebSettings.setDomStorageEnabled(true);
        myWebSettings.setSavePassword(true);
        myWebSettings.setSaveFormData(true);

        myweb.setWebViewClient(new MyWebViewClient());
        myweb.setWebChromeClient(new MyWebChromeClient());

        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        myweb.loadUrl("https://www.mywebsite.com");

    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    private class MyWebChromeClient extends WebChromeClient{
        @Override
        public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
            WebView newWebView = new WebView(MainActivity.this);
            view.addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            //transport.getWebView();
            resultMsg.sendToTarget();
            //Toast.makeText(MainActivity.this, WebView.HitTestResult , Toast.LENGTH_LONG).show();
            return true;
        }
    }

    @Override
    public void onBackPressed () {
        if (myweb != null && myweb.canGoBack())
            myweb.goBack();// if there is previous page open it
        else
            super.onBackPressed();//if there is no previous page, close app
    }
}

标签: androidwebview

解决方案


我认为,您的问题在于,每次您开始活动时,webview 都不知道先前设置的 cookie。

为了克服这个问题,您可以在启动 webview 的新实例时存储设置的 cookie,重新注入它们。

关于如何获取 cookie 的参考资料可以在她那里找到:Reading cookies


推荐阅读