Как я могу определить использование аппаратной или мягкой клавиатуры в гибридном планшете?

Проблема:

У меня есть небольшая группа из примерно 90 пользователей, что чрезвычайно важно, поэтому, когда один или два из этих бизнес-клиентов хотят изменить пользовательский интерфейс в своем веб-приложении, они обычно получают выделенные ресурсы для разработки. Тем не менее, нам важно понять, как приложение используется группой в целом, потому что эта группа имеет свои личные взгляды на то, как их интерфейс должен выглядеть, и все они используют приложение по-разному. У меня больше всего проблем с идентификацией их использования аппаратных и мягких клавиатур. Оптимально я ищу ответ так же просто, как "используйте новый Window.TabletMode == true!" Я не думаю, что существует простой ответ.

Исследования:

  • Вопрос SO Обнаружение виртуальной клавиатуры и аппаратной клавиатуры - это единственный аналогичный вопрос, который я вижу, но он сосредоточивает половину своего времени на использовании клавиатуры JavaScript для замены мягкой клавиатура, поэтому ответы говорят о том, как настроить клавиатуру на номера, даты и т.д. Кроме того, он ищет кросс-браузерные решения, где мне нужна поддержка только IE11+. Наконец, я могу зависеть от стыковки аппаратной клавиатуры и конкретной марки (Dell). Наконец, я могу зависеть от Windows/IE11, поэтому могут быть другие возможности подхода по сравнению с этим 3-летним вопросом. Мое использование гибридного планшета также делает подходы к проверке работоспособности бесполезными, поскольку я уже знаю все возможности (touch и т.д.) Уже имеющиеся на устройстве.
  • Я мог проверить Registry для настройки пользовательского интерфейса, но мне действительно нужно придерживаться JavaScript или чего-то подобного.
  • Android имеет недокументированные, но известные events, которые указывают на отображение и скрытие клавиатуры. Однако ни один из пользователей не будет использовать Android.
  • IE должен получить сообщение WM_SETTINGCHANGE, когда произойдет изменение, но я не могу определить, было ли это доступно для JavaScript API, Я думаю, что это будет более конкретное сообщение (если оно есть), поэтому я не могу найти что-либо с этим поисковым термином и JavaScript.

код:

Из W3Schools,

Свойство window.orientation возвращает 0 для портрета и 90 или -90 для пейзажного вида.

В сочетании с window.innerHeight я мог бы использовать что-то вроде...

var portrait;

$(window).on("orientationchange",function(event){
  if (event.orientation == 0)
  {
     portrait = true;
  } 
  else //if not, it landscape
  {
    portrait = false;
  }
});

Затем я использовал бы window.innerHeight в сочетании со значением portrait, чтобы определить, выглядит ли соотношение ширины к высоте, у меня открыта клавиатура. Этот подход действительно может работать в полноэкранном режиме, учитывая мои довольно узкие ограничения, но что делать, если браузер не является полноэкранным? Я уверен, что есть много других причин, чтобы не писать расчеты хакерского отношения для этого. Кроме того, мое самое большое желание, конечно, было бы сделать это с любым браузером и любым размером экрана.

Эти вещи я могу обработать: мне нужно будет установить переменные при загрузке документа и выработать способ определить, когда типизация станет актуальной. Мне может потребоваться проверить некоторые возможности браузера. Возможно, я бы увеличил счетчики для ввода и без аппаратной клавиатуры. Как только я нажму определенное число (скажем, 5 нажатий клавиш), я отправил бы запрос POST на конечную точку отслеживания данных, чтобы сообщить, что сеанс 12345 использует мягкую клавиатуру (или жесткую клавиатуру). Впоследствии я отменил подписку на обработчик событий. Однако я работаю над этой частью, но я не хочу, чтобы кто-то тратил время на украшение или разработку огромного примера.

Окружающая среда:

  • Оборудование должно быть гибридом Dell/ноутбука (конкретная модель TBD) с IE11 +. Я ненавижу делать что-то конкретное IE, но если он работает на IE11 +, он вполне приемлем.
  • Я мог бы использовать любые предложенные JavaScript-библиотеки, но имейте в виду, что JQuery 2.2 и нокаут 2.1 уже присутствуют, поэтому мало "веса" добавляется для решения с использованием JQuery.
  • Я, вероятно, не могу получить разрешение на запись приложения, использующего ActiveX или какой-либо другой подход с жестким интерфейсом, который потребует установки локального приложения, поскольку моя компания имеет примерно 50 000 пользователей и развертывание например, для 90 пользователей было бы слишком сложно поддерживать.
  • Размер экрана должен составлять 11 дюймов, но мне было бы грустно прибегать к использованию определенного размера и разрешения, потому что такой ответ был бы крайне ограничен в приложении для меня или будущих читателей.

Удар для читателей:

Я вижу переход от Ipads в пространстве медицинского киоска /EMR, потому что Ipads ограничивают множество вариантов пользовательского интерфейса в пользу сплоченного опыта. Врачи особенно часто привлекают внимание высокопоставленных ИТ-лидеров, если они хотят очень специфического изменения пользовательского интерфейса. Microsoft, как правило, допускает множество нестандартных вмешательств и (в последнее время) более стандартных типов вмешательства в работу браузера. Я думаю, что многие из этих движений идут по таблицам Windows по этой причине, а также по той причине, что многие медицинские группы сильно влияют на возможности разработки .NET.

Ответ 1

Bottom Line: Вы не можете получить именно то, что хотите. В IE11 у вас есть еще пара проблем. Вы не можете просто использовать Fullscreen API с помощью promise = element.requestFullscreen(), потому что IE сначала запрашивает разрешение у пользователя, а API позволяет вам проверять возможности но не состояние. Кроме того, несколько полноэкранных приложений могут совместно использовать рабочий стол в Windows 8 и 8.1, что немного нелогично.

Однако, если вы можете рассчитывать на то, что веб-приложение, вероятно, будет полноэкранным, ваш "хакерский" JavaScript-решение, вероятно, лучший ответ. Получите начальные размеры, когда документ загружается и сравнивается во время нажатия клавиш. Обратите внимание, что пользователь может не использовать программную клавиатуру только потому, что он или она не находится в доке. Пользователю еще нужно явно открыть программную клавиатуру.

Если бы вы сказали "только Android", это было бы простое решение, но вы уже продемонстрировали, что знаете это в своем вопросе. Если вы хотите использовать настольное приложение, здесь какая-то документация MSDN на аппаратном токене здесь, но вы снова указали, что это будет не так просто,