I am trying to just set and load a cookie inside webview in android. I tried many cookie admin scripts to try and get this to work. I have JavaScript enabled.
When launching the application on Samsung S3 and Samsung Galaxy Tab 10.1, cookies are not displayed at all (android 4.1). However, when you run the software on the Samsung Galaxy, HTC Desire Z and Android emulators, cookies are set and read perfectly.
When working, webview returns a string as expected, when it does not work, the result is simply "null"; cookie does not matter / not set.
In my particular case, a sliding navigation class is also used, which is an extension of the Actionbar Sherlock.
I would really appreciate any help; I have been struggling with this for several weeks now. Thanks.
HTML:
<html> <head> <title> </title> <script> function createCookie(name, value) { var day = (1 * 24 * 60 * 60 * 1000); var date = new Date(); date.setTime(date.getTime() + (20 * 365 * day)); var expires = "; expires=" + date.toGMTString(); document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + "=" + value + expires + "; path=/"; } function readCookie(name) { 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) return c.substring(nameEQ.length,c.length); } return null; } </script> </head> <body> <h1 class=""> <script type="text/javascript"> createCookie("test", "If this is working, it returns this string. If this is not working, it returns null."); document.write("test: " + readCookie("test")); </script> </body> </html>
Java Code:
Public class MainActivity extends SherlockActivity ISIDNavigationCallback {
public static final String EXTRA_TITLE = "com.devspark.sidenavigation.sample.extra.MTGOBJECT"; public static final String EXTRA_RESOURCE_ID = "com.devspark.sidenavigation.sample.extra.RESOURCE_ID"; public static final String EXTRA_MODE = "com.devspark.sidenavigation.sample.extra.MODE"; public static String WebLoaded = "0"; public static String page = "signup.php"; private ImageView icon; private SideNavigationView sideNavigationView; private WebView engine; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); icon = (ImageView) findViewById(android.R.id.icon); sideNavigationView = (SideNavigationView) findViewById(R.id.side_navigation_view); sideNavigationView.setMenuItems(R.menu.side_navigation_menu); sideNavigationView.setMenuClickCallback(this); if (getIntent().hasExtra(EXTRA_TITLE)) { String title = getIntent().getStringExtra(EXTRA_TITLE); int resId = getIntent().getIntExtra(EXTRA_RESOURCE_ID, 0); setTitle(title); icon.setImageResource(resId); sideNavigationView.setMode(getIntent().getIntExtra(EXTRA_MODE, 0) == 0 ? Mode.LEFT : Mode.RIGHT); } //test getSupportActionBar().setDisplayHomeAsUpEnabled(true); String domain = "localhost"; CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.setCookie(domain, "name=value"); cookieManager.setCookie(domain, "path=/"); cookieManager.setCookie(domain, "HttpOnly"); //enable cookies CookieManager.getInstance().setAcceptCookie(true); //navigates web engine, including on nav click engine = (WebView) findViewById(R.id.web_engine); engine.loadUrl("file:///android_asset/" + page); //enable JavaScript support - disabled by default for some weird reason engine.getSettings().setJavaScriptEnabled(true); engine.setWebViewClient(new WebViewClient()); //disables text selection engine.setOnLongClickListener(new View.OnLongClickListener() { public boolean onLongClick(View v) { return true; } }); } @Override public void onPause() { super.onPause(); engine.getSettings().setJavaScriptEnabled(false); } @Override public void onResume() { super.onResume(); engine.getSettings().setJavaScriptEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: sideNavigationView.toggleMenu(); break; case R.id.mode_left: item.setChecked(true); sideNavigationView.setMode(Mode.LEFT); break; case R.id.mode_right: item.setChecked(true); sideNavigationView.setMode(Mode.RIGHT); break; default: return super.onOptionsItemSelected(item); } return true; } @Override public void onSideNavigationItemClick(int itemId) { switch (itemId) { case R.id.side_navigation_menu_item1: invokeActivity(getString(R.string.title1), R.drawable.ic_android1); page = "index.html"; break; case R.id.side_navigation_menu_item2: invokeActivity(getString(R.string.title2), R.drawable.ic_android2); page = "test.html"; break; case R.id.side_navigation_menu_item3: invokeActivity(getString(R.string.title3), R.drawable.ic_android3); break; case R.id.side_navigation_menu_item4: invokeActivity(getString(R.string.title4), R.drawable.ic_android4); break; case R.id.side_navigation_menu_item5: invokeActivity(getString(R.string.title5), R.drawable.ic_android5); break; default: return; } finish(); }