簡體   English   中英

模擬鍵盤輸入/插入字符串到textarea(adwords)

[英]simulate keyboard input / insert string into textarea (adwords)

我正在嘗試使用CefSharp (版本43)從https://adwords.google.com/ko/KeywordPlanner/Home刪除關鍵字

我能夠以編程方式登錄adwords門戶。

但是,每當我嘗試通過將element.valueelement.innerTextelement.innerHtml分配到所需的字符串時,將一些文本(搜索關鍵字)插入特定的textarea( id="gwt-debug-keywords-text-area" ),但沒有任何反應。

var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.addEventListener("keydown", onKeyPress, false);

function onKeyPress(e) {
    alert(e.keyCode);
}

function triggerKeyboardEvent(el, keyCode) {
    var evt = document.createEventObject ?
        document.createEventObject() : document.createEvent("Events");

    if (evt.initEvent) {
        evt.initEvent("keydown", true, true);
    }

    evt.keyCode = keyCode;
    evt.which = keyCode;

    el.dispatchEvent ? el.dispatchEvent(evt) : el.fireEvent("onkeydown", evt);
}

triggerKeyboardEvent(txtElem, "s".charCodeAt(0));

在上面的代碼中引發了警報消息,但文本框仍然是空的。

顯然,該文本區域的關鍵/下行事件正在被谷歌自己的大量JS代碼攔截。 不幸的是谷歌源代碼是高度混淆的,像我這樣的JS-noob很難調試和遵循邏輯。

如何在textarea中插入/模擬鍵盤輸入?

我嘗試過的其他一些代碼(也參見注釋掉的部分):

var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.focus();

function simulateKeyEvent(character) {
    var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: character.charCodeAt(0), char: character, shiftKey: false });
    //var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: "a".charCodeAt(0), char: "a", shiftKey: true });
    return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(e);

    var evt = document.createEvent("KeyboardEvent");
    /*
    if (e.initKeyboardEvent) {  // Chrome, IE
        e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
    } else { // FF
        e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, character.charCodeAt(0), 0);
    }
    */
    //(evt.initKeyEvent || evt.initKeyboardEvent)('keypress', true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
    evt.initKeyboardEvent("keypress", true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
    return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(evt);
}

simulateKeyEvent("s");

這些方法都不起作用....

好的,我找到了解決方案:

function setKeywordText(text) {
    var el = document.getElementById("gwt-debug-keywords-text-area");
    el.value = text;
    var evt = document.createEvent("Events");
    evt.initEvent("change", true, true);
    el.dispatchEvent(evt);
}

setKeywordText("test");

@masroore的代碼工作得很好,今天救了我。 但后來我發現這個方法已被棄用 ,正在被刪除。

新方法更新了代碼,它執行相同的操作:

function setKeywordText(text) 
{
    var el = document.getElementById("gwt-debug-keywords-text-area");
    el.value = text;
    var evt= new Event('change');
    el.dispatchEvent(evt);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM