iOS: приложение Cordova InAppBrowser работает на iPad, и программная клавиатура не может быть извлечена функцией focus () при определенных условиях - PullRequest
0 голосов
/ 15 мая 2018

Мы используем Angular5.2.9 + Ionic3.2 + Ionic Native 4.5.3 + Cordova8.0, чтобы создать приложение с Cordova InAppBrowser и получить доступ к следующему HTML в приложении:

testsoftkeyboard3.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script language="javascript">
    var objInput1=null;
    var objInput2=null;

    function initLoad()
    {
        objInput1=document.getElementById("input1");
        objInput2=document.getElementById("input2");
    }

    function onBlur(event)
    {
        if(event.target.value == 'abc')
        {
            event.target.style.backgroundColor="#ffffff";
            return true;
        }

            //If we do not use setTimeout to perform alert here,
            //the InAppBrowser will die without responding to any action in the Pattern2
            setTimeout(function () {
                alert('Please input abc');
                //objInput1.focus();
                //objInput1.click();
            }, 0);

        event.target.style.backgroundColor = "#ff0000";
        event.target.focus();
        event.target.click();

        setTimeout(function () {
            alert(document.activeElement.id);
            //objInput1.focus();
            //objInput1.click();
        }, 2000);

        return false;
    }

</script>
</head>
<body onload="javascript:initLoad()">
input1:<input type="text" id="input1" onblur="javascript:onBlur(event);"/>&nbsp&nbsp&nbsp&nbsp - &nbsp&nbsp&nbsp&nbsp
input2:<input type="text" id="input2"/>
<br/>
</body>
</html>

Приведенный выше код предназначен для достижения следующих эффектов:

Шаг1. Когда фокус на входе 1, ipad автоматически отображает программную клавиатуру (это должна быть функция iOS по умолчанию, фокус на поле ввода автоматически выталкивает программную клавиатуру)

Снимок экрана Step1

Шаг2. Когда мы вводим контент в input1, он будет показывать предупреждение, если обнаружит, что ввод не «abc», когда input1 теряет фокус (реализовано в событии onblur)

Снимок экрана Step2

Step3. В то же время цвет фона для input1 изменится на красный, и фокус снова вернется к input1 и автоматически снова отобразит экранную клавиатуру

Снимок экрана Step3

Наша проблема заключается в том, что на шаге 2 мы можем заставить input1 потерять фокус двумя способами (The Pattern1 и The Pattern2):

Pattern1. Используйте мышь, чтобы нажать input2

Pattern2. Нажмите кнопку в правом нижнем углу программной клавиатуры, чтобы убрать клавиатуру ScreenShot

В настоящее время, когда мы работаем с Pattern1, проблем нет, можно ожидать, что Step3 покажет эффект.

Но когда мы работаем с Pattern2, когда при вызове метода focus (), чтобы заставить input1 получить фокус, программная клавиатура будет мигать (появляться и сразу исчезать), пытались сделать так, чтобы программная клавиатура всегда появлялась, мы уже потратили 2, 3 дня, чтобы попытаться решить проблему, не сделали.

Не знаете, нужно ли изменять код InAppBrowser Objective-C? Есть ли какой-нибудь способ управления отображением или скрытием программной клавиатуры по коду?

Пожалуйста, помогите нам. Большое спасибо.

...