我是靠谱客的博主 调皮网络,这篇文章主要介绍JS模拟键盘输入及手动触发事件的方式,现在分享给大家,希望可以做个参考。

脚本模拟键盘输入方式,监听键盘事件e.IsTrusted属性是false,此属性为只读属性不能更改,用户用键盘正常输入该值为true。目前没有找到好的处理方式。

Firefox浏览器中有如下处理方式(未试,只做记录):

    var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                  .getInterface(Components.interfaces.nsIDOMWindowUtils);
    utils.sendNativeKeyEvent(0, schar, 0, schar, '');

在Chrome浏览器浏览器此代码报错。

如下是核心代码,仅供参考:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//添加keydown事件监听,跟踪按键 document.addEventListener("keydown", function (e) { traceEvent(e); }); //模拟键盘触发事件方法 function triggerKeyboardEvent(el, keyCode) { var eventObj = document.createEventObject ? document.createEventObject() : document.createEvent("Events"); if (eventObj.initEvent) { eventObj.initEvent("keydown", true, true); } eventObj.keyCode = keyCode; eventObj.which = keyCode; el.dispatchEvent ? el.dispatchEvent(eventObj) : el.fireEvent("onkeydown", eventObj); } //针对按键事件的逻辑处理 function traceEvent(e) { var ch = String.fromCharCode(e.keyCode); document.getElementById("txtContent").value = ch; console.log(e); } //Html控件调用的方法 function clk() { var str = "a"; var cCode = str.charCodeAt(0); triggerKeyboardEvent(document.body, cCode); }

手动触发事件的方式

场景:JS自动填充CSDN登录页用户名、密码时,点击登录按钮,会清空用户名、密码且登录失败。此时可手动触发Input事件或onpropertychanged事件。

源码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//针对提交表单时,脚本填充的信息会清空,可能需要额外触发input事件,IE下是propertychanged事件 if ("createEvent" in document) { var evt = document.createEvent("HTMLEvents"); evt.initEvent("input", true, false); obj.dispatchEvent(evt); } else obj.fireEvent("input"); //change事件手动触发方式 var obj = document.getElementById(elemId); if ("createEvent" in document) { var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", true, false); obj.dispatchEvent(evt); } else obj.fireEvent("onchange");

keydown、keyup、keypress都可以用此种方式触发。

最后

以上就是调皮网络最近收集整理的关于JS模拟键盘输入及手动触发事件的方式的全部内容,更多相关JS模拟键盘输入及手动触发事件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部