在Chrome中模拟keydown事件

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

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

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

我尝试过的事情是:

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

  2. https://stackoverflow.com/a/4176116/1291122 – 同样,结果相同。

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

还有一些其他来源。 但没有任何效果。 如何使用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秒后,您将在该文本字段上看到光标。 但是不会调用按键事件。

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

 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是打字事件。 text是您要搜索的文本。

此function执行以下操作:

得到输入 – >清除它 – >创建一个键盘输入事件 – >焦点输入 – >在输入上应用事件

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