Я искал эту конкретную проблему здесь, в StackOverflow и в различных системах отчетов об ошибках Apple / WebKit, но пока не нашел ее специально процитированной (что просто не представляется возможным).
Проблема:На нашей странице оплаты у нас есть различные поля формы (ввод и выбор).Для целей PCI / безопасности у нас есть iframe, который обслуживает поле номера кредитной карты (у iframe only есть это поле - больше ничего).
Проблема в том, чточто для просто пользователей iOS они иногда не могут сфокусироваться на поле номера кредитной карты. Похоже, есть 2 разные, но связанные с этим ошибки веб-набора iOS.См. ОБНОВЛЕНИЕ ниже.
Если они просто перемещаются вниз от одного поля к другому, это обычно работает.Но если они подпрыгивают вокруг полей, они могут попасть в сценарий, где «попробуй как они» могут , они не могут получить фокус в поле номера кредитной карты это не похоже на то, что поле кредитной карты получаетfocus (похоже, это проблема рендеринга).
Изначально мы думали, что, возможно, JS или какой-то невидимый DIV мешают, но в итоге я смог создать пример HTML-only для воссозданияпроблема .(Инструкции о том, как воссоздать проблему, приведены на странице примера.) Для привязки к codepen требуется добавить код:
<iframe src="iframe.html"></iframe>
Мне постоянно удавалось воссоздать эту проблему на устройствах iOS 10-12 (устройство iOS 9, похоже, не имело этой проблемы).
Для потомков я собираюсь предоставить обходной путь, с которым я столкнулся в отдельной, но частично связанной ошибке WebKit.Однако мне было интересно, сталкивались ли другие люди с этой проблемой и обнаружили ли другие способы ее решения.
ОБНОВЛЕНИЕ:
После дальнейшего изучения я обнаружил, что страдаем от двух отдельныхошибок.Первая, в основном, как я описал выше, но, похоже, больше связана с рендерингом, когда iOS 1030 * не выглядит , как будто она фокусируется на поле.Тем не менее, если вы перейдете к примеру codepen new example , я настрою и буду выполнять шаги, даже если это не похоже на то, что поле имеет фокус, если вы наберете текст,правильно отображать.
Вторая проблема встречается реже, но она более вредна.Для отключения требуется 3 критерия:
- Источником iframe должен быть перекрестный источник
- Родительская страница присоединяет прослушиватель событий либо к сенсорному запуску, сенсорному перемещению или прикосновению (даже так просто, какпустой вызов функции)
- Поле iframe находится вне экрана, когда другое поле имеет фокус и присутствует клавиатура.
Результатом этих 3 вещей является то, что пользователь не можетСосредоточить внимание на поле iframe вообще (при наборе текста ничего не происходит, хотя document.activeElement показывает последнюю родительскую страницу, имеющую фокус).Восстановление возможности получить фокус в iframe может быть затруднено, как правило, требуется наличие родительской страницы, которая может быть сфокусирована, в то время как поле iframe visible , тогда пользователь может переместить свой фокус на поле iframe изТам.
Если какой-либо из 3 критериев изменен (не междоменный, никаких прослушивателей событий для этих 3 событий касания или iframe не виден), то присутствует только первая, менее запретительная ошибка.
Я также обновлю свой "ответ" ниже с этой реализацией.
Обновление 2: Новый пример , который я поставил, показывает обе ошибки В бою;первая страница - ошибка # 1 со ссылкой на пример ошибки # 2 из разных источников.