如何在JavaScript中使用x,y坐标模拟点击?

如何在JavaScript中使用x,y坐标模拟点击?,javascript,jquery,html,mouseevent,mouseclick-event,Javascript,Jquery,Html,Mouseevent,Mouseclick Event,是否可以使用给定的坐标来模拟网页中的JavaScript点击?出于安全原因,您不能使用JavaScript移动鼠标指针,也不能使用JavaScript模拟点击 您试图完成的是什么?您可以发送一个单击事件,尽管这与真正的单击不同。例如,它不能用来欺骗跨域iframe文档,使其认为它被单击了 所有现代浏览器都支持document.element frompoint和HTMLElement.prototype.click(),因为至少IE 6、Firefox 5、任何版本的Chrome,可能还有任何您

是否可以使用给定的坐标来模拟网页中的JavaScript点击?

出于安全原因,您不能使用JavaScript移动鼠标指针,也不能使用JavaScript模拟点击

您试图完成的是什么?

您可以发送一个单击事件,尽管这与真正的单击不同。例如,它不能用来欺骗跨域iframe文档,使其认为它被单击了

所有现代浏览器都支持
document.element frompoint
HTMLElement.prototype.click()
,因为至少IE 6、Firefox 5、任何版本的Chrome,可能还有任何您可能关心的Safari版本。它甚至会跟踪链接并提交表格:

document.elementFromPoint(x, y).click();

是的,您可以通过创建事件并发送它来模拟鼠标单击:

function click(x,y){
    var ev = document.createEvent("MouseEvent");
    var el = document.elementFromPoint(x,y);
    ev.initMouseEvent(
        "click",
        true /* bubble */, true /* cancelable */,
        window, null,
        x, y, 0, 0, /* coordinates */
        false, false, false, false, /* modifier keys */
        0 /*left*/, null
    );
    el.dispatchEvent(ev);
}
当心在元素上使用
click
方法——它被广泛地实现,但不是标准的,并且在例如PhantomJS中会失败。我假设jQuery的
.click()
实现做了正确的事情,但尚未确认。

这只是更新为使用MouseeEvent对象

function click(x, y)
{
    var ev = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true,
        'screenX': x,
        'screenY': y
    });

    var el = document.elementFromPoint(x, y);

    el.dispatchEvent(ev);
}

它对我不起作用,但它将正确的元素打印到控制台

代码如下:

function click(x, y)
{
    var ev = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true,
        'screenX': x,
        'screenY': y
    });

    var el = document.elementFromPoint(x, y);
    console.log(el); //print element to console
    el.dispatchEvent(ev);
}
click(400, 400);


你的目标是什么?:)例如,你是想模拟点击图像地图吗?@Aicule:谢谢你让我知道!我将为这个问题补充一些信息。我只是在试验,没有什么真正有效的=)在Chrome和Safari中,你可以点击特定的x,y位置。这就是工作原理。Firefox是唯一一款失败的浏览器,所以可能是Firefox特有的安全策略。答案就在下面,
createEvent()
+
initMouseEvent()
在我的例子中,是测试。你完全可以用特定的X/Y坐标模拟点击,尽管它的行为不会完全相同。@RadiantHex:yes,事实上,IE是第一个实现它的,它可以追溯到IE6。Chrome、Firefox和Safari 5的实现很好,但Safari 4和Opera的实现不正确(尽管可行)。看,我很高兴这个发现=D使许多现在认为不可能的事情成为可能。。。或者至少不那么复杂。谢谢这似乎不适用于$.live()事件,有人知道如何使它也适用于用$.live()创建的事件吗?@并且这现在在以下条件下工作:我有网页,我正在从我的域以外的其他域加载Iframe。我想点击iframe区域。你对此有什么解决办法吗?@parixit:不,这是不可能的。您可以模拟单击iframe,但它只会向上传播包含的文档。所包含文档中的任何内容都不会受到影响(出于非常明显的安全原因)。将我从混乱中解救出来。我最初的方法失败了,但这次成功了,谢谢.plus1没有使用jQuery。与公认的答案相反,这个答案确实回答了这个问题。这比jQuery的
$功能强大得多。click()
initMouseEvent
已被弃用:您可以使用
var event=newmouseevent(“click”,{clientX:x,clientY:y,bubbles:true},而不是弃用的
initMouseEvent
中也显示了这一点。这一点对我来说很有吸引力。它对这个答案没有任何帮助: