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ブラウザでこのコードが間違っています.
以下はコアコードです.ご参考ください.
シーン:JSが自動的にCSDNを充填してページのユーザー名、パスワードを登録する時、ログインボタンをクリックすると、ユーザー名、パスワードが空になり、ログインに失敗します.この場合は、手動でInputイベントまたはonpropertychangedイベントをトリガすることができます.
ソースは以下の通りです
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はこのような方式でトリガできます.