【发布时间】:2017-11-03 14:18:30
【问题描述】:
我有一个纯 HTML+CSS+JS 应用程序,我正在尝试使用 Webview 将其嵌入到 Android 应用程序中。该应用程序一切正常,只是没有存储 cookie。我已经尝试过这些 QA 中的建议,但它们似乎都不起作用:
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。
编辑
下面是readCookie() 函数的代码,用于在 JavaScript 中读取 cookie。我认为同样有可能存储 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;
}
【问题讨论】:
标签: javascript java android cookies webview