Обработчик touchstart портит фокус ввода текста при переносе в iframe
Я работаю над приложением phonegap, которое использует iframe для встраивания уже мобильного приложения. В веб-приложении есть функция поиска, которая фокусирует текстовое поле с виртуальной клавиатурой. Пока все хорошо...
Тем не менее, я использую библиотеку, которая регистрирует прослушиватель сенсорного запуска в документе (тот, что находится внутри iframe). Таким образом, если во время отображения виртуальной клавиатуры пользователь касается документа, клавиатура перестает работать.
С ipad (или симулятора ipad в XCode... Я тестировал на 7.0.3) перейдите сюда и следуйте инструкциям: https://s3.amazonaws.com/ypassets-andy/app-frame.html
Интересно то, что если вы не заверните его в iframe, клавиатура не сломается. Перейдите сюда: https://s3.amazonaws.com/ypassets-andy/app.html и следуйте инструкциям, чтобы увидеть, что он НЕ сломается.
Я бился головой об этом, но не могу понять, как заставить это работать. Для справки эти сообщения об обмене стека кажутся связанными, но я не мог решить эту проблему
- Запретить прокрутку в мобильном браузере без фокусировки ввода
- Задержка нажатия на iPhone, подавляющая фокус ввода
- ввод ipad в iframe
Спасибо за любые идеи!
Энди
1 ответ
Похоже, это неисправимая ошибка iOS. Единственное исправление - это перемещение входных данных из iframe в основной документ.
Более длинная история:
Энди попытался решить эту проблему, но в конечном итоге потерпел неудачу (это было для логина / настройки диалога в модальном режиме). Меня чуть не убило, чтобы я никогда не узнал, но, возможно, это хорошее упражнение дзен. Вот что мы устранили / попробовали:
- iframe не фокусируется / фокусируется на другом документе
- полностью размыть все перед установкой фокуса
- setRange и т. д. вместо фокуса
- ручная сборка и запуск событий в стеке touchstart
- проверить, происходит ли событие несколько раз
- посмотрите, имеют ли значение свойства CSS, такие как user-select или touch-callout
Все это последнее предположение заключалось в том, что это каким-то образом связанная логика "прокрутки входов" Webkits, получившая некоторые обновления в iOS 7.