我有一個純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
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;
}
謝謝,格雷格。是的,這就是我最終在我的應用程序中做的事情,但也必須有一種方法來保存cookie,因爲我們想用Webview模擬Web瀏覽器。 –
您是否嘗試初始化CookieManager onPageFinished,就像推薦用於不推薦使用的CookieSyncManager一樣? https://stackoverflow.com/questions/8390156/how-to-save-a-cookie-in-an-android-webview-forever –
我做了,但是Android Studio中說,'CookieSyncManager'折舊。但無論如何我做到了,甚至失敗了(仍然沒有保存在瀏覽器中的cookie)。另外,我已經在我的設備和模擬器上測試了該應用程序。 –