JSアナログキーボード入力および手動トリガイベントの方式

2096 ワード

スクリプトアナログキーボード入力方式では、キーボードイベントe.Is Trustedのプロパティはfalseです.読み取り専用の属性は変更できません.ユーザーはキーボードでこの値をtrueと正常に入力します.今はいい処理が見つかりません.
Firefoxブラウザには以下のような処理があります.
    var utils=window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)                  .get Interface(Components.interfaces.nsIDOMWindowUtils)    utils.senda NativeKeyEvent(0、schar、0、schal、')
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、keyressはこのような方式でトリガできます.