2017-06-02 88 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)。另外,我已經在我的設備和模擬器上測試了該應用程序。 –