【问题标题】:Firing button programatically doesn't do the same action as when clicking it manually以编程方式触发按钮不会执行与手动单击时相同的操作
【发布时间】:2020-07-22 23:24:27
【问题描述】:

我正在开发一个 Chrome 扩展程序,它应该可以帮助我的团队克服某些网站中的问题。 该功能是在单击键盘“输入”按钮时“以编程方式”单击特定网站按钮。

这是我的扩展代码:

document.addEventListener("keyup", function(event) {
    if (event.keyCode === 13) {
        var btn = document.getElementsByClassName("standard")[0].getElementsByClassName("actions")[1].children[1].children[0];
        btn.click();
  }

});

但是,无论我做什么,我的“代码点击”之后的网站操作与实际按下按钮本身时不同(它有一些副产品)..

由于我不是 JS 方面的专家,我想知道是否有另一个代码 sn-p 是在通过鼠标实际单击按钮时触发的,或者类似的。

我还尝试了一些实际模拟鼠标单击按钮本身的代码,但它也具有完全相同的行为:

function clickLink(link) {
    var cancelled = false;

    if (document.createEvent) {
        var event = document.createEvent("MouseEvents");
        event.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0,
            false, false, false, false,
            0, null);
        cancelled = !link.dispatchEvent(event);
    }
    else if (link.fireEvent) {
        cancelled = !link.fireEvent("onclick");
    }
}

我非常感谢有关如何触发按钮的任何想法,就像它在本机网站中真正被点击时触发一样。 谢谢!

【问题讨论】:

标签: javascript html angularjs dom google-chrome-extension


【解决方案1】:

btn.click() 应该可以工作,假设你有一个按钮元素。否则,这可行:

 document.addEventListener("keydown", function(event) {
            if (event.keyCode === 13) {
                event.preventDefault();
                var btn = document.getElementsByClassName("standard")[0].getElementsByClassName("actions")[1].children[1].children[0];
                var e = new MouseEvent('click', {view: window,bubbles: true,cancelable: true});
                btn.dispatchEvent(e);
            }
        })

签出this

【讨论】:

  • 确实有效,但仍然执行我在 btn.click(); 时看到的相同的副作用操作;
  • btn.click() 的副作用是什么?
  • 它执行以下操作:想象在 WhatsApp 上发送一条消息,因此它不是在聊天中添加一个消息条目,而是添加两个,即复制消息。然而,这只是一个 UI 的事情,实际上只发送一条消息,刷新页面时它显示对话的真实状态,即只发送了 1 条消息......我假设他们有一些代码首先添加带有时钟图标的消息(表示它处于发送状态),然后在发送时将其更改为“v”,并且可能会删除带有时钟的旧消息...但仅在按下实际按钮时。
  • Nick,我做了一个演示视频给你看看:youtu.be/lQ59YflhARU
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多