jQuery click() 在 Greasemonkey/Tampermonkey 脚本中不起作用

标签 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)");
}​

正如你所看到的,我什至尝试过 location.assign hack但没有任何效果,控制台中也没有错误。

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

最佳答案

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

Any event handlers attached with .bind() or one of its shortcut methods are triggered when the corresponding event occurs. They can be fired manually, however, with the .trigger() method.

这意味着不是由 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);
}



<小时/>

请注意,在极少数情况下,页面实际上会处理事件组合,而不是点击,并且理论上,页面可以区分任何 人工产生的事件(尽管我还没有在野外看到过)。
如果是这种情况,请链接到目标页面,以便我们可以制定解决方法。

关于jQuery click() 在 Greasemonkey/Tampermonkey 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423426/

相关文章:

javascript - 删除或阻止选择 JavaScript 的 Greasemonkey 脚本

javascript - 为什么我的 Tampermonkey 脚本会抛出 "Selenium is not defined"?

javascript - 如何从两个选择选项中过滤文本/div?

javascript - 调整 G 标签内的 SVG 矩形元素的大小

greasemonkey - 如何仅运行一次 Greasemonkey 脚本

javascript - 如何让greasemonkey运行特定的javascript : function?

javascript - 在 session 之间存储持久列表?

javascript - 运行带有 HTML 标签的用户脚本?

javascript - 使用javascript获取数组中的所有css根变量并更改值

php - PHP 和 jQuery 中检测移动设备和提供页面的标准实践