У меня есть веб-просмотр, и я загружаю в него несколько html5 + js. Мой веб-приложение чрезвычайно интенсивно использует данные. Используя функции состояния, я могу вернуться к правильной «странице», на которой я должен находиться после изменения ориентации, однако мое веб-приложение находится в опасности, поскольку все мои переменные javascript также были сброшены.
Есть ли способ сохранить все мои переменные javascript и восстановить их при изменении ориентации веб-просмотра? А как насчет значений, введенных в текстовые поля формы?
==================
Я достиг определенного прогресса в этом. В моем JS есть хук, который называется requestState();
Когда вызывается эта функция, он отправляет все мои переменные JS на сторону android / java через интерфейс JS.
На стороне Java я сохраняю эту информацию, используя getLastNonConfigurationInstance
и onRetainNonConfigurationInstance
. Я протестировал вывод, и он действительно сохраняет все мои переменные JS в моем объекте на Java прямо перед изменением состояния активности при изменении ориентации.
Проблема в том, чтобы вернуться туда, где я должен быть. У меня в JS есть функция, противоположная requestState();
, которая называется setState(input);
. Эта функция вызывается со стороны Android с помощью mywebview.loadUrl( "javascript:setState(" + jsonStr + ")" );
. Я делаю это в конце моего onCreate, после дефлятирования веб-просмотра и вызова wv.restoreState(savedInstanceState);
.
Что я заметил, так это то, что setState
не было определено во время моего вызова! На самом деле, ни один из моих JS-скриптов не готов к вызову или даже не существует / не найден в конце функции onCreate моей деятельности. Чтобы проверить свое здравомыслие, я попытался mywebview.loadUrl( "javascript:alert(" + jsonStr + ")" );
и действительно увидел то, что ожидал увидеть - предупреждение со всеми значениями моих переменных. Однако я заметил, что сама страница не отображалась до появления предупреждения. Как мне решить проблему?