2017-06-02 87 views
0

我有一个纯HTML + CSS + JS应用程序,我试图使用Webview将其嵌入到Android应用程序中。该应用程序都工作正常,但曲奇没有存储。我已经尝试过在这些QA的建议,但没有人似乎工作:Cookie未存储在Android Webview中

Make Android WebView not store cookies or passwords

Cookie doesn't work properly in webview in android

Webview cannot accept cookies

Android WebView HTTP Cookies not working in API 21

这是我发起的WebView在我的活动中:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.setAcceptCookie(true); 
    cookieManager.acceptCookie(); 
    cookieManager.setAcceptFileSchemeCookies(true); 

    WebView webView = (WebView) findViewById(R.id.webView1); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 

    //webView.getSettings().setPluginState(PluginState.ON); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.getSettings().setAllowContentAccess(true); 
    if (Build.VERSION.SDK_INT >= 16) { 
     webView.getSettings().setAllowFileAccessFromFileURLs(true); 
     webView.getSettings().setAllowUniversalAccessFromFileURLs(true); 
    } 

    webView.loadUrl("file:///android_asset/index.html"); 

} 

这里是JavaScript createCookie()方法完美地工作在一个正常的浏览器:

function createCookie(name, value, days) 
{ 
    value = value.replace(';', COOKIE_ENCODER); 

    if (days>=0) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = "; expires=" + date.toGMTString(); 
    } 
    //else var expires = ""; 


    document.cookie = name + "=" + value + expires; // + "; path=/"; 
} 

我也使用CookieSyncManager虽然Android Studio中提出,其贬值尝试。当调用createCookie()方法时,控制台不显示任何错误,它只是不存储cookie。

编辑

下面是这是用来读取在JavaScript中的cookie readCookie()函数的代码。我认为它同样可能的是,cookie将被存储,但浏览器具有回读的问题:

function readCookie(name) 
{ 
    //name = name.replace(';',COOKIE_ENCODER); 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) 
     { 
      s = c.substring(nameEQ.length, c.length); 
      s = s.replace(COOKIE_ENCODER,';'); 
      return s; 
     } 
    } 
    return null; 
} 

回答

1

你可以使用,而不是饼干window.localStorage。 https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

+0

谢谢,格雷格。是的,这就是我最终在我的应用程序中做的事情,但也必须有一种方法来保存cookie,因为我们想用Webview模拟Web浏览器。 –

+0

您是否尝试初始化CookieManager onPageFinished,就像推荐用于不推荐使用的CookieSyncManager一样? https://stackoverflow.com/questions/8390156/how-to-save-a-cookie-in-an-android-webview-forever –

+0

我做了,但是Android Studio中说,'CookieSyncManager'折旧。但无论如何我做到了,甚至失败了(仍然没有保存在浏览器中的cookie)。另外,我已经在我的设备和模拟器上测试了该应用程序。 –