我的键盘观察者停止工作 - 显然是在关注“输入”之后?

时间:2017-09-08 09:09:56

标签: javascript android webview

我正在创建一个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);
    }
});

我正在看按键的按键,因为我的设备就是其中之一,连接到条形码扫描仪:

enter image description here

我的'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'概述'按钮,离焦然后重新聚焦应用程序时 - 键盘再次开始工作。也许我能以某种方式使用这个事实让我的键盘再次工作?

0 个答案:

没有答案