Я пытаюсь отправить строку из внешнего приложения в браузер, набирая 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>