Как имитировать щелчок на экране с координатами x, y в javascript / html? [Дубликат]

Есть множество вопросов по SO, которые спрашивают:

  • как получить счет конкретных значений из списка, разделенного запятыми
  • , как получить записи, имеющие только одно и то же 2/3 / etc из этого списка с разделителями-запятыми

Еще одна проблема с списком, разделенным запятыми, - обеспечить согласованность значений - сохранение текста означает возможность опечаток ...

Это все симптомы денормализованных данных и подчеркивают, почему вы всегда должны моделировать нормализованные данные. Денормализация может быть оптимизацией запроса, , которая будет применяться, когда сама на самом деле представится .

74
задан Undo 12 May 2013 в 15:22
поделиться

4 ответа

Вы можете отправить событие 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

117
ответ дан Andy E 21 August 2018 в 17:14
поделиться
  • 1
    Это восхитительно!! Именно то, что я искал !!! = О – RadiantHex 18 July 2010 в 23:06
  • 2
    – RadiantHex 18 July 2010 в 23:06
  • 3
    @RadiantHex: да, на самом деле IE первым применил его, и он возвращается к IE6. Реализации Chrome, Firefox и Safari 5 прекрасны, но Safari 4 и Opera неверны (хотя и работоспособны). См. quirksmode.org/dom/w3c_cssom.html#documentview . – Andy E 18 July 2010 в 23:14
  • 4
    Я так рад этому открытию! = D Делает многие вещи считающимися невозможными сейчас =) ... или, по крайней мере, менее сложными. Благодаря!! – RadiantHex 18 July 2010 в 23:18
  • 5
    Кажется, что это не работает с событиями $ .live (), и кто-нибудь может заставить его работать с событиями, созданными с помощью $ .live ()? – ActionOwl 30 August 2011 в 21:50
  • 6
    @parixit: нет, это невозможно. Вы можете имитировать щелчок на iframe, но он просто будет распространять содержащийся документ. Ничто в содержащемся документе не будет затронуто (по очень очевидным причинам безопасности). – Andy E 30 June 2013 в 13:55

Это только ответ 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);
}
21
ответ дан Community 21 August 2018 в 17:14
поделиться

Из соображений безопасности вы не можете переместить указатель мыши с помощью javascript и не имитировать клик с ним.

Что вы пытаетесь выполнить?

0
ответ дан quantumSoup 21 August 2018 в 17:14
поделиться
  • 1
    @Aicule: Спасибо, что сообщили мне! Я добавлю немного информации на вопрос. Я просто экспериментирую, ничего действительно результативного =) – RadiantHex 18 July 2010 в 22:57
  • 2
    В Chrome и Safari вы можете запустить клик в определенной позиции x, y. Вот как работает эта демонстрация . Firefox - это единственный браузер, где он терпит неудачу, поэтому, возможно, это специальная политика безопасности для Firefox. – thdoan 19 October 2016 в 09:27
  • 3
    Истина заключается в ответе ниже, createEvent() + initMouseEvent() – Valer 11 December 2016 в 19:40
  • 4
    В моем случае тестирование. – Jose Nobile 19 April 2017 в 03:35

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

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

49
ответ дан Victor Zamanian 21 August 2018 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: