Как смоделировать щелчок, используя координаты x, y в JavaScript? - PullRequest
83 голосов
/ 19 июля 2010

Можно ли использовать данные координаты для имитации клика в JavaScript на веб-странице?

Ответы [ 4 ]

133 голосов
/ 19 июля 2010

Вы можете отправить событие click , хотя это не то же самое, что реальный щелчок. Например, его нельзя использовать для обмана междоменного документа iframe, заставляя его думать, что на него щелкнули.

Все современные браузеры поддерживают document.elementFromPoint и HTMLElement.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

57 голосов
/ 12 мая 2013

Да, вы можете смоделировать щелчок мыши, создав событие и отправив его:

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() делает правильные вещи, но не подтвердила.

23 голосов
/ 22 марта 2016

Это всего лишь ответ Торазабуро , обновленный для использования объекта 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);
}
0 голосов
/ 19 июля 2010

По соображениям безопасности вы не можете ни перемещать указатель мыши с помощью JavaScript, ни имитировать щелчок с ним.

Чего вы пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...