Keyup-Event для Alt не запускается после переключения в другое окно - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь отправить строку из внешнего приложения в браузер, набирая Unicode-коды для каждого символа (т. Е. ALT + 0068 для «D»). В моем веб-приложении я хочу проверить данные.

Я пытался использовать событие «нажатие клавиши», которое работало в Chrome и Firefox, но в IE11 и Edge - нет.

Я переключился на события «keydown» и «keyup». Теперь, когда я впервые захожу на страницу, все работает нормально, но когда я переключаюсь в другое окно и возвращаюсь в IE11 или Edge, он больше не работает. Затем я должен напечатать что-нибудь на физической клавиатуре или нажать клавишу Tab, чтобы это снова заработало.

IE11 или Edge что-то устанавливают внутри? Как я могу предотвратить это поведение или автоматизировать нажатие клавиши?

<html>
  <head>
    <script type="text/javascript">
      if(!String.prototype.includes){
        String.prototype.includes = function (search, start) {
          'use strict';
          if (typeof start !== 'number') {
              start = 0;
          }

          if (start + search.length > this.length) {
              return false;
          } else {
              return this.indexOf(search, start) !== -1;
          }
        };
      }
    </script>
    <script type="text/javascript">
      (function () {
          var bAlt = false;
          var sUnicode = "";
          function onKeyDown(event) {
              if (event.key.includes("Alt")) {
                  bAlt = true;
                  console.log("Alt pressed");
                  event.preventDefault();
                  sUnicode = "";
              } else if (!event.altKey) {
                  bAlt = false;
                  console.log("Alt released");
                  sUnicode = "";
              }
              if (bAlt && event.key.match("[0-9]")) {
                  event.preventDefault();
                  sUnicode += event.key;
                  var unicode = document.getElementById("unicode");
                  unicode.innerHTML = sUnicode;
              }
          }
          function onKeyUp(event) {
              if (event.key.includes("Alt") || (bAlt && !event.altKey)) {
                  event.preventDefault();
                  bAlt = false;
                  console.log("Alt released");

                  // TODO Evaluate

                  var output = document.getElementById("output");
                  output.innerHTML += String.fromCharCode(sUnicode);
                  sUnicode = "";
              }
          }
          document.addEventListener('keydown', onKeyDown);
          document.addEventListener("keyup", onKeyUp);

          function onFocus() {
              bAlt = false;
              document.body.className = "focused";
          }

          function onBlur() {
              document.body.className = "blurred";
          }
          window.onfocus = onFocus;
          window.onblur = onBlur;

      })();
    </script>
    <style>
      .focused {
          background-color: #ffffff;
      }
      .blurred {
          background-color: #cccccc;
      }
    </style>
  </head>
  <body id="body" >
    <div id="unicode"></div>
    <div id="output"></div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...