在Chrome中模拟keydown事件

时间:2015-03-28 00:14:43

标签: javascript jquery google-chrome google-chrome-extension

我正在尝试在Google Chrome控制台中模拟keydown事件。我感兴趣的网站是web.whatsapp.com,关注的元素是document.getElementsByClassName("input-search")[0];

我想要做的是,当在该字段中键入一些文本时,下面显示的联系人列表会更新包含该文本字段中内容的联系人。

在尝试其他任何事情之前,我只需使用this回答将焦点设置到此文本字段。

我尝试过的事情是:

  1. https://stackoverflow.com/a/12187302/1291122 - 没有任何反应,且所显示的联系人列表中没有更新任何元素。

  2. https://stackoverflow.com/a/4176116/1291122 - 同样的结果。

  3. https://stackoverflow.com/a/10520017/1291122 - 什么都没发生。相同的结果

  4. 还有一些其他来源。但没有任何效果。如何使用JavaScript控制台模拟确切的效果(在文本字段中键入一些文本并查看联系人列表更新)?

    我的Chrome版本是截至编写答案日期的最新版本 - 41.0.2272.101 修改

    这是我尝试过的示例代码之一。 (摘自上面的答案3)

    setTimeout(function () {
        $(".input-search").focus();
        Podium = {};
        Podium.keydown = function(k) {
            var oEvent = document.createEvent('KeyboardEvent');
    
            // Chromium Hack
            Object.defineProperty(oEvent, 'keyCode', {
                get : function() {
                    return this.keyCodeVal;
                }
            });
            Object.defineProperty(oEvent, 'which', {
                get : function() {
                    return this.keyCodeVal;
                }
            });
    
            if (oEvent.initKeyboardEvent) {
                oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, false, false, false, false, k, k);
            } else {
                oEvent.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, k, 0);
            }
    
            oEvent.keyCodeVal = k;
    
            if (oEvent.keyCode !== k) {
                alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")");
            }
    
            document.dispatchEvent(oEvent);
        }
        Podium.keydown(83);
    }, 5000);
    

    只需将此代码放入Chrome浏览器控制台(适用于web.whatsapp.com)并按Enter键即可。然后立即点击您网页的任何部分(转移焦点)。 5秒后,您会在该文本字段上看到光标。但是不会调用按键事件。

1 个答案:

答案 0 :(得分:2)

当我正在使用javascript操作web.whatsapp.com时,你可以看看我创建的这个函数在搜索输入中输入一些文字:

public DateTime findOldestDogsBirthday() {
    Collections.sort(dogList, new Comparator<Dog>() {
        @Override
        public int compare(Dog o1, Dog o2) {
            DateTime d1 = o1.getBirthday();
            DateTime d2 = o2.getBirthday();
            return d1.compareTo(d2);
        }
    });
    return !dogList.isEmpty() ? dogList.get(0).getBirthday() : null;
}

function searchContact(text) { var input = document.getElementsByClassName("input input-search")[0]; input.value = ""; var evt = document.createEvent("TextEvent"); evt.initTextEvent ("textInput", true, true, window, text, 0, "en-US"); input.focus(); input.dispatchEvent(evt); } 是输入元素。 input是输入事件。 evt是您要搜索的文字。

此功能执行以下操作:

获取输入 - &gt;清除它 - &gt;创建键盘输入事件 - &gt;关注输入 - &gt;在输入上应用事件

编辑:自从回答这个问题以来,Whatsapp Web已经更新,因此这个解决方案在Whatsapp Web中不再起作用。(可能对其他地方或项目有用)