我正在创建一个Android WebView应用程序。
在javascript中,我开始关注按键的'body',同时避免来自'inputs'和'textareas'的按键,使用以下代码:
body.on('keyup', function (e) {
let tag = e.target.tagName.toLowerCase();
if (tag !== 'input' && tag !== 'textarea') {
let kCd = e.keyCode || e.which;
if (kCd === 229) {
return;
} else if (kCd === 0) {
kCd = 13; // enter key
}
window.keypresser.watch(kCd);
}
});
我正在看按键的按键,因为我的设备就是其中之一,连接到条形码扫描仪:
我的'keypresser.watch'函数接受keycode参数,并且(a)附加到扫描的字符串,或者(b)如果按下enter键,则键码13在应用程序内执行命令。
当我在模拟器中调试它时,这在应用程序中运行良好,但是当我在物理设备上使用它时,一旦我专注于<input>
元素,它似乎就会停止工作。 'enter'事件仍然通过 - 键码13 - 但否则它似乎通过一个空白字符串发送。
我已经尝试重新聚焦'身体',但这并没有解决它。我不明白这里出了什么问题。
如果你想测试一下,这是我的window.keypresser对象:
window.keypresser = {
value: "",
/** @param {Number} keycode */
watch: function (keycode) {
if (keycode === 13) {
window.keypresser.enter(window.keypresser.value);
window.keypresser.value = "";
} else {
window.keypresser.value += String.fromCharCode(keycode);
}
},
enter: function (value) {
// change this function to do things with the 'value'
}
};
[编辑]
奇怪的是,在我的Java代码中,我将“后退”按钮设置为
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
所以当我回去时,将我的任务移回去,再次尝试条码扫描器 ,它可以工作。或者当我按两次Android'概述'按钮,离焦然后重新聚焦应用程序时 - 键盘再次开始工作。也许我能以某种方式使用这个事实让我的键盘再次工作?