Пользовательская клавиатура в WKWebView - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу управлять клавиатурой, отображаемой при использовании WKWebView.

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

let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
webView.navigationDelegate = self

Он загрузит HTML, который выглядит так:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <div class="inputElement textFieldInput">
        <input type="text" id="textField" value="" data-clear-btn="true"/>
    </div>
</body>
</html>

Обычно клавиатура управляется параметром type в поле ввода. «num» для цифровой клавиатуры и «text» для буквенно-цифровой клавиатуры. Но я хочу иметь больше контроля.

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

Как мне изменить код swift, чтобы я мог это сделать?

В идеале я мог бы определить несколько клавиатур и позволить html-коду управлять ими примерно так: <input type='customkb1'> and <input type='customkb2'>

Моя немедленная необходимость - отключить кнопку «эмодзи» на клавиатуре, но я хотел бы получить общее решение, так как смогу реально улучшить удобство использования своего приложения, если смогу определить клавиатуру в соответствии с тем, что вводит пользователь.

Вот что мы нашли: Вот хитрость, которую я знаю и использую для родной части приложения https://stackoverflow.com/a/25861718/1885345

Но это не работает для webViews Вот способ указать клавиатуру из WKWebView: https://stackoverflow.com/a/28533488/1885345

Но у него нет возможности установить клавиатуру без смайликов. Вот что я использую для отключения сторонних клавиатур: https://stackoverflow.com/a/34863426/1885345

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Если вы ищете способ, позволяющий вводить только определенные символы в поле ввода, отключение режимов клавиатуры (например, клавиатуры Emoji) - не лучший вариант. Существует множество способов ввода нежелательных символов: их можно вставить из буфера обмена или даже ввести в результате замены текста (например, вы можете сделать :) превращенным в ?).

Проверка ввода должна выполняться со стороны веб-страницы, а не с WKWebView.

0 голосов
/ 10 ноября 2018

Хороший вызов! До сих пор я тестировал его на iPad и получил его наполовину работоспособным (с оговоркой), объявив поле ввода pattern следующим образом:

<input type="text" pattern="[0-9]*" value="" data-clear-btn="true"/>

Дело в том, что на самом деле клавиатура сначала появляется в цифровом виде, но она позволяет переключать буквенно-цифровой вид (без смайликов) с помощью нижних боковых кнопок ABC. С помощью Javascript я скопировал введенное значение в другое поле, и Regex фактически не отфильтровывает введенные буквенно-цифровые символы. Пока все хорошо.

Как только вы добавите A-Za-z (в качестве префикса или постфикса) в шаблон, кнопка emoji вернется.

Я попытался перехватить UIResponder.keyboardWillShowNotification, но не возвращает объект клавиатуры, так как тогда я хотел программно установить его UIKeyboardType, но этот атрибут, очевидно, отражает только UITextViews.

В качестве альтернативы вы можете объявить поле ввода типа password, очистив точки с помощью Javascript и отобразив фактическое значение в другое не редактируемое поле ...

Если я найду более элегантный способ, я обновлю свой ответ, так как уже довольно поздно. Приветствия.

РЕДАКТИРОВАТЬ: очевидно, только используя элемент TextInput с ReactNative , вы можете напрямую привязать keyboardType к ascii-capable клавиатуре iOS, которая освободит нас от Emojis.

...