Кордова IOS 12 Wkwebview вопрос прокрутки тела - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть приложение Cordova (PGB cli-6.5.0, Cordova iOS 4.3.1, wkwebview), которое демонстрирует странное поведение на iOS 12.1.Код работал много лет до iOS 12. Приложение поддерживает различные стили числового ввода, реализованные в приложении, но также включает стандартную клавиатуру.В iOS 12 всплывающее окно ввода или стандартная клавиатура появляется и выглядит как обычно, но прикосновение не регистрируется в правильном месте.Они смещены по вертикали (помните, что все нормально визуально).Это верно даже со стандартной клавиатурой.Изменение ориентации устройства устраняет проблему для этого экземпляра, но проблема остается при следующем выборе входа.Этого не происходит при использовании веб-версии приложения на iOS 12 Safari или в Chrome.Это не происходит в Android при использовании собственной версии Cordova.

Используя отладчик, я обнаружил, что элемент body имеет ненулевой scrollTop после того, как стандартная клавиатура отклонена для ввода, который был бы покрытклавиатура.Этого никогда не должно случиться.Исправление, которое я нашел, состояло в том, чтобы установить body.scrollTop = 0 в обработчике события onblur.

Я обнаружил, что даже пользовательские входы, которые не отображали стандартную клавиатуру, делали это.Установка body.scrollTop = 0 вызывала заметный «отскок» на теле, когда был выбран ввод, который был бы покрыт стандартной клавиатурой (который не должен отображаться).

Я играл с настройкой KeyboardDisplayRequiresUserActionв false и с использованием более новых версий PGB (cli-7.1.0) без изменений.Установка точки останова отладчика в обработчике событий, по-видимому, указывает на то, что клавиатура отображается, даже если вызвана функция protectDefault (), она просто снова исчезает перед визуализацией.

Я получил временную остановку клавиатуры, установив для ввода значениеЧТЕНИЯ.Это работает на iPad, но на iPhone вместо клавиатуры появляется навигатор по вкладкам (по сути, просто стандартный заголовок клавиатуры).Я не мог заставить это остановиться на iPhone.Я, наконец, переключился на использование диапазона вместо ввода, когда не использую стандартную клавиатуру.В любом случае это, вероятно, к лучшему.

Мой предварительный вывод заключается в том, что в iOS 12 есть три ошибки wkwebview:

  • protectDefault () не полностью предотвращает отображение и прокрутку клавиатурытело, из обязательных.Кажется, он просто удаляется после отображения перед рендерингом.
  • Аналогично, настройка readOnly для элемента ввода не полностью препятствует отображению клавиатуры.
  • Всякий раз, когда wkwebview отображает клавиатуру после выбораввод, который будет закрыт клавиатурой, прокручивает тело, чтобы сохранить видимость ввода, но не может восстановить scrollTop при отклонении, даже если дисплей отображается так, как будто он был восстановлен.Это сместит все события касания на сумму прокрутки.Вы даже можете увидеть анимацию щелчка под пальцем, если вы коснетесь расположения смещенной кнопки.Также помните, что изменение ориентации устройства восстанавливает правильную прокрутку.

Я не вижу, как Cordova или мой JS могут вызвать это.

Кто-нибудь еще заметил это?

...