Как я могу получить WKWebView для отображения клавиатуры на iOS? - PullRequest
0 голосов
/ 07 сентября 2018

В моем приложении для iOS используется WKWebView с contenteditable = true для определенного div. Я хотел бы иметь код, чтобы клавиатура отображалась в веб-представлении, чтобы пользователь мог просто начать печатать. Вещи, которые я пробовал, не имели никакого эффекта:

  1. Указание веб-представлению becomeFirstResponder (длинный кадр, потому что веб-представление не знает, что div использовать).
  2. Внедрение JS, чтобы сообщить div focus(). (Это работает в других браузерах, но, к сожалению, не в WKWebView)
  3. Имитация сенсорных событий в JS с помощью TouchEvent и dispatchEvent() в надежде создать впечатление, что пользователь нажал на div.

В третьем случае я также использовал addEventListener(), чтобы наблюдать за симулированными касаниями и сравнивать их с реальными событиями касания при нажатии на экран. Похоже, ключевое отличие состоит в том, что значение isTrusted события является ложным для смоделированных касаний.

Я понимаю, что это потенциальная проблема безопасности, позволяющая приложениям имитировать сенсорные события, но у меня не было никаких других идей. Я пытаюсь заставить клавиатуру появляться, то, что вводит пользователь, не то, с чем я хочу связываться. В основном я хочу то же самое, что звонить becomeFirstResponder() на UITextView.

Это очень похоже на выпуск WebKit 142757 , но я не понял, как использовать предложенный обходной путь, связанный с этим.

Уточнение: Я могу настроить и использовать редактируемое веб-представление, но клавиатура не появляется, пока я не нажму на веб-представление. Я пытаюсь заставить клавиатуру появляться автоматически, не требуя нажатия, чтобы начать редактирование.

1 Ответ

0 голосов
/ 07 сентября 2018

Я попробовал это на детской площадке iPad, и это работает без каких-либо действий с моей стороны. Возможно, есть другое представление, которое фиксирует прикосновения, или «contenteditable» написано с ошибкой, или что-то еще?

screenshot of playground before running

screenshot of playground after tapping div

...