如何使用JavaScript中的x,y坐标模拟单击?

时间:2010-07-18 21:40:30

标签: javascript jquery html mouseevent mouseclick-event

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

5 个答案:

答案 0 :(得分:133)

您可以发送单击事件,但这与实际点击不同。例如,它不能用于欺骗跨域iframe文档,使其认为它被点击了。

所有现代浏览器都支持document.elementFromPointHTMLElement.prototype.click(),因为至少IE 6,Firefox 5,任何版本的Chrome以及您可能关心的任何版本的Safari。它甚至会关注链接并提交表单:

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

https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

答案 1 :(得分:57)

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

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()的实现是正确的,但尚未确认。

答案 2 :(得分:23)

这只是torazaburo's answer,已更新为使用MouseEvent对象。

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);
}

答案 3 :(得分:0)

出于安全原因,您不能使用javascript移动鼠标指针,也不能使用它模拟单击。

你想要完成的是什么?

答案 4 :(得分:0)

它确实对我有用,但是它将正确的元素打印到控制台上

这是代码:

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);