Javascript Cookie未存储在Android Webview中
我有一个纯HTML+CSS+JS应用程序,我正试图使用Webview将其嵌入到Android应用程序中。该应用程序运行正常,只是没有存储cookies。我已经尝试过这些QA中的建议,但它们似乎都不起作用: 以下是我在活动中启动WebView的方式:Javascript Cookie未存储在Android Webview中,javascript,java,android,cookies,webview,Javascript,Java,Android,Cookies,Webview,我有一个纯HTML+CSS+JS应用程序,我正试图使用Webview将其嵌入到Android应用程序中。该应用程序运行正常,只是没有存储cookies。我已经尝试过这些QA中的建议,但它们似乎都不起作用: 以下是我在活动中启动WebView的方式: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView
@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");
}
下面是JavaScriptcreateCookie()
方法,它在普通浏览器中完美地工作:
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的可能性是相同的,但浏览器在回读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;
}
函数readCookie(名称)
{
//name=name.replace(“;”,COOKIE_编码器);
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
您可以使用window.localStorage代替cookies 谢谢你,格雷格。是的,这就是我在我的应用程序中实际完成的操作,但也必须有一种保存cookie的方法,因为我们希望使用Webview模拟web浏览器。您是否尝试在PageFinished上初始化CookieManager,就像推荐给不推荐使用的CookieSyncManager一样?是的,但是Android Studio说,CookieSyncManager
被贬值了。但我还是照做了,即使这样也没有成功(浏览器中仍然没有保存cookie)。此外,我已经在我的设备和模拟器上测试了该应用程序。