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

概述

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

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

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

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

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

//添加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事件。

源码如下:

//针对提交表单时,脚本填充的信息会清空,可能需要额外触发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模拟键盘输入及手动触发事件的方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部