Android 4.0 -> 4.3 (в комплекте) - веб-хранилище потеряно между страницами веб-просмотра

Я работаю над проектом Android, который опирается наWebView просматривать несколько HTML-страниц, хранящихся на устройстве, и отправлять входные данные в веб-просмотр, когда это необходимо для их сохранения в базе данных.

Каждая страница содержит элементы управления, которые связаны с jQuery по отношению к предыдущим / следующим страницам, каждая страница содержит входные данные разных типов (флажки, текстовые поля и т. Д.).

Последняя страница содержит кнопки отправки, которые используют JSInterface для сохранения результатов в БД SQLite.

Другая кнопка (в пользовательской верхней панели навигации) предлагает ту же систему.

Результаты могут быть изменены путем доступа к первой странице со всеми сохраненными данными, система jQuery заполнит соответствующие данные.

Для более подробной информации, я используюSDK 19 и составление против4.4.2, но я работал сSDK 15 и составление против4.2.2 где у меня не было проблемы.

Если кому-то нужно посмотреть, что сделано, в упрощенной системе проверьте этоJSBin.

Проблема

я используюSessionStorage для хранения входных данных между страницами я использовал файлы cookie, но они стали ненадежными, когда было более 150 пар ключ / значение.

Моя проблема в том, что на некоторых устройствахSessionStorage исчезают между страницами.

Протокол испытаний1-й случай - пребывание только на первой странице

Если я останусь только на первой странице, заполните поля и отправьте результаты, все в порядке. Возвращение для модификации предлагает мне полностью заполненную первую страницу.

2-й случай - перемещение между страницами

После заполнения страницы 1 я перехожу на страницу 2 и заполняю новые входные данные, затем перемещаюсь между страницами, чтобы посмотреть, не потеряны ли входные данные на каждой отдельной странице. Все на месте, но если я отправлю результаты, будут переданы только входные данные текущей страницы.

Результаты тестирования версий Android

3.2 -Работает

4.1.2 -Не работает

4.2.1 -Не работает

4.3 -Не работает

4.4.2 -Работает

Проверенные решения

ПереопределениеWebViewClient«sshouldOverrideUrlLoading метод для возврата False -Не работает

С помощьюLocalStorage вместо SessionStorage ничего не изменилось

Insights

Переключение сsessionStorage вLocalStorage не помогло.

Я нашел некоторыеполезная информация о версиях WebKit, используемых Android:

Android 3.2.1 использует довольно старую версию, но она работает (v534.13)

Android версии от4,0 в4,3 использовать тот же движок WebKit (v534.30)

Android 4.4 использует совершенно новую версию (v537.36), что объясняет, почему это работает

Ни одного шага к исправлению, НО это дает более точное представление о проблеме и устройстве, на которое она влияет.

Решение

Начиная с SDK 16, новый параметр безопасности был вынужден предотвратить доступ кода Javascript к контенту из любого источника.

if(Build.VERSION.SDK_INT >= 16) {
    setting.setAllowUniversalAccessFromFileURLs(true);
}

Слава кksasq чтобы найти это!

[ПРАВКА 18/02/2014]

После некоторого тестирования я указал проблему на TargetSdkVersion, BuildTarget ничего не меняет.

Это установлено15, WebStorage работает как задумано.

Если установлено16 или выше, WebStorage портится.

Ответы на вопрос(3)

Ваш ответ на вопрос