Получение положения документа в веб-представлении?

Другие предлагают, чтобы исключения не использовались, потому что неправильный вход в систему следует ожидать в нормальном потоке, если пользователь ошибается. Я не согласен, и я не понимаю причины. Сравните это с открытием файла ... если файл не существует или недоступен по какой-либо причине, то исключительная ситуация будет выдана платформой. Использование вышеупомянутой логики было ошибкой Microsoft. Они должны были вернуть код ошибки. То же самое для синтаксического анализа, веб-запросов и т. Д. И т. Д.

Я не считаю плохой вход в систему частью нормального потока, это исключение. Обычно пользователь вводит правильный пароль, и файл существует. Исключительные случаи являются исключительными, и вполне нормально использовать исключения для них. Усложнение вашего кода путем распространения возвращаемых значений через n уровней вверх по стеку является пустой тратой энергии и приведет к грязному коду. Сделайте самое простое, что может сработать. Не преждевременно оптимизируйте, используя коды ошибок, исключительные вещи по определению случаются редко, а исключения ничего не стоят, если вы их не выбросите.

6
задан yanchenko 6 July 2009 в 09:54
поделиться

2 ответа

Если под «текущей позицией» вы подразумеваете точку где-то на данной странице, я не верю, что это возможно ... по крайней мере, не только из Java. Во всем API WebKit, доступном для Java, отсутствует большая часть всего, что связано с содержимым страниц.

Если у вас есть контроль над содержимым страницы и есть способ узнать эти позиции с помощью встроенного Javascript, вы можете:

] Шаг № 1: Используйте WebView # addJavascriptInterface () , чтобы добавить объект с каким-то методом recordPosition () , сохраняя информацию там, где это необходимо

Шаг № 2: Создание функция Javascript, которая вызывает recordPosition () для внедренного объекта.

, а затем либо:

Шаг № 3a: запускать эту функцию Javascript из самого Javascript (например, на основе щелчка) или

Шаг № 3b: Вызовите loadUrl ("javascript: ..."); в своем WebView , где ... заменяется кодом Javascript для запуска функции Javascript с шага № 2.

Восстановление этих позиций должно работать примерно так же: выполнить фактическое восстановление с помощью Javascript, возможно, инициированного кодом Java.

Обратите внимание, что у меня есть Понятия не имею, доступно ли то, что вы хотите (получить / установить текущую позицию) из Javascript, так как я не очень люблю программировать в браузере.

6
ответ дан 9 December 2019 в 20:47
поделиться

Подход, который я использовал, был следующим:

В методе onSaveInstanceState () вычислите, насколько далеко вниз по странице прокрутил пользователь.

    int contentHeight = webView.getContentHeight();
    int scrollY = webView.getScrollY();

    float scrollPercent = ((float) scrollY / ((float) contentHeight));

Сохраните это в комплекте. При восстановлении страницы в методе onCreate () дождитесь завершения загрузки страницы (в WebClient.onPageFinished () ), прокрутите до записанной позиции:

    int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent);
    webView.scrollTo(0, y);
  • Используя float и вычисление соотношения работает в случае переключения между пейзажем и портретом.
  • Может работать достаточно хорошо , но не идеально при смешивании с изображениями с автоизменением размеров.
  • Масштаб также может быть учтен. Я стараюсь спрятать масштаб в предпочтении метода onPause () , а затем webView.setInitialScale (scale) , прежде чем вы начнете загружать страницу.
  • Я обнаружил, что установка невидимого веб-представления, когда scrollPercent> 0 выглядит лучше.
6
ответ дан 9 December 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: