首页 > 解决方案 > Android WebVIew中的键盘长键按下

问题描述

任何人都知道如何在 Android WebView 中处理长按键盘键。我以为我可以简单地使用KeyboardEvent 重复属性(https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat)但是当我使用以下代码对其进行测试时,尽管按住键,但返回的重复属性始终为假。

document.addEventListener('keydown', logKey);

function logKey(event) {
    console.log(event.repeat);
}

上面的代码在桌面浏览器上按预期工作,返回一次 false,然后重复返回 true,同时按住一个键。但是在 Android WebView 中,它反复返回 false。

任何想法是什么问题,或者处理长键盘按键的替代方法?

更新 为了澄清,我试图绑定到长按键事件而不是忽略它。如果按住某个键一段时间,我想触发一个功能。

标签: javascriptandroidwebviewevent-handlingkeydown

解决方案


你可以重写document.onkeydown函数,然后通过防抖动机制处理对应的key值。毕竟我们需要处理的是键值,而不是长键。代码如下:

var throttle = function(func, delay) {
            var prev = Date.now();
            return function() {
                var context = this;
                var args = arguments;
                var now = Date.now();
                if (now - prev >= delay) {
                    func.apply(context, args);
                    prev = Date.now();
                }
            }
        }
function onkeypress(evt) {
    var keycode = evt.which ? evt.which : evt.keyCode;
    console.log(keycode);
}

document.onkeypress = throttle(onkeypress, 500);

推荐阅读