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

Rad*_*Hex 88 html javascript jquery mouseevent mouseclick-event

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

And*_*y E 137

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

所有现代浏览器都支持document.elementFromPointHTMLElement.prototype.click(),因为至少IE 6,火狐5浏览器的任何版本,可能Safari浏览器的任何版本,你可能会在乎.它甚至会关注链接并提交表单:

document.elementFromPoint(x, y).click();
Run Code Online (Sandbox Code Playgroud)

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

  • @RadiantHex:是的,事实上 IE 是第一个实现它的,它可以追溯到 IE6。Chrome、Firefox 和 Safari 5 的实现都很好,但 Safari 4 和 Opera 的实现不正确(尽管可行)。请参阅http://www.quirksmode.org/dom/w3c_cssom.html#documentview。 (2认同)
  • @parixit:不,不可能。您可以模拟对iframe的点击,但它只会沿包含文档的方向传播。所包含的文档中的任何内容都不会受到影响(出于非常明显的安全原因)。 (2认同)

小智 59

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

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);
}
Run Code Online (Sandbox Code Playgroud)

小心click在元素上使用该方法 - 它被广泛实现但不是标准的,并且将在例如PhantomJS中失败.我假设jQuery的实现是.click()正确的,但尚未确认.

  • 代替已弃用的 `initMouseEvent`,您可以使用 `var event = new MouseEvent("click", { clientX: x, clientY: y, bubbles: true } )` 这也显示在 https://stackoverflow.com/a /36144688/384670。 (8认同)
  • `initMouseEvent`已被弃用:https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent (7认同)
  • plus1不使用jQuery.与接受的答案相反,这个人回答了这个问题. (3认同)

use*_*021 23

这只是torazaburo的答案,更新为使用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);
}
Run Code Online (Sandbox Code Playgroud)