V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gam2046
V2EX  ›  Android

应用内嵌 Webview,如何向网页发送任何 keyCode 的按键事件?

  •  
  •   gam2046 · 2018-05-03 22:11:49 +08:00 · 5538 次点击
    这是一个创建于 2182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说来是比较奇怪的需求,目前需要向 Webview 内运行的网页发送一些奇奇怪怪的 keyCode 的按键事件。

    比如我希望让document.onkeydown接收到一个keyCode = -1/-2/-3的事件应该如何做呢?

    直接调用Webview.dispatchKeyEvent(...)对于一些奇奇怪怪的 keyCode,即KeyEvent常量中没有定义的值 会被 android 自动转换成KeyEvent.KEY_UNKOWN

    即网页收到的keyCode为 0,并不是我派发出去的值。

    那么我在 Android 中,如何优雅的向 Webview 内的网页发送一个我指定 keyCode 的按键事件呢?

    (包含完整的onkeydown/onkeypress/onkeyup事件)

    4 条回复    2018-05-05 14:45:10 +08:00
    codehz
        1
    codehz  
       2018-05-04 16:10:53 +08:00
    放弃(为啥不考虑改网页用另一种方式通讯
    -1 -2 这种事件本来就不应该存在
    felixlong
        2
    felixlong  
       2018-05-04 16:22:35 +08:00
    webView.loadUrl("javascript:document.onkeydown(xxx);");
    gam2046
        3
    gam2046  
    OP
       2018-05-05 14:33:07 +08:00
    @codehz 道理是这么个道理,但是....天知道三大运营商的历史设备上为什么会有这种奇奇怪怪的设计,导致现在要做向下兼容。我也很绝望啊。


    @felixlong 这是最坏的方法了,因为我还要获得当前的对象是在 document 还是 input 还是其他的
    codehz
        4
    codehz  
       2018-05-05 14:45:10 +08:00
    @gam2046 #3 注入 JS 干掉这样的监听器,然后用现代的方法去模拟
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3806 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 05:07 · PVG 13:07 · LAX 22:07 · JFK 01:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.