我有一个纯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)。另外,我已经在我的设备和模拟器上测试了该应用程序。 –