jQuery click()无法在Greasemonkey/Tampermonkey脚本中使用

Fra*_*Kim 2 jquery greasemonkey tampermonkey

我有问题通过Greasemonkey/Tampermonkey触发jQuery点击...

jQuery('button').each(function() {
    jQuery(this).css('background', 'red');
    jQuery(this).click();
    location.assign("javascript:jQuery(this).click();void(0)");
}?
Run Code Online (Sandbox Code Playgroud)

你可以看到我甚至尝试过location.assign hack但是没有任何东西可以工作,控制台也没有错误.

有趣的是,是的,背景颜色确实变为红色所以我假设它的.click()工作方式与其他jQuery方法不同.

Bro*_*ams 8

jQuery .click()只是jQuery .trigger()Docs的快捷方式:

当相应的事件发生时,将触发附加.bind()或其快捷方法之一的任何事件处理程序.但是,可以使用.trigger()方法手动触发它们.

这意味着不是由jQuery设置的事件处理程序不能总是由.click()(或.trigger())触发.

要解决此问题,请发送实际的鼠标事件:

jQuery ('button').each ( function () {
    jQuery (this).css ('background', 'red');

    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    this.dispatchEvent (clickEvent);
}
Run Code Online (Sandbox Code Playgroud)




请注意,在一些罕见的情况下,页面实际上将处理事件的组合,而不是click理论上,页面可以区分任何人为产生的事件(尽管我还没有在野外看到它).
如果是这种情况,请链接到目标页面,以便我们可以进行解决方法.