Czy możliwe jest użycie podanych współrzędnych do symulacji kliknięcia w JavaScript na stronie internetowej?
javascript
jquery
html
mouseevent
mouseclick-event
RadiantHex
źródło
źródło
Odpowiedzi:
Możesz wywołać zdarzenie kliknięcia , ale nie jest to to samo, co prawdziwe kliknięcie. Na przykład nie można go używać do oszukiwania międzydomenowego dokumentu iframe, aby pomyślał, że został kliknięty.
Wszystkie nowoczesne przeglądarki obsługują
document.elementFromPoint
iHTMLElement.prototype.click()
, od co najmniej IE 6, Firefox 5, każdą wersję Chrome i prawdopodobnie każdą wersję Safari, na której prawdopodobnie Ci zależy. Będzie nawet podążać za linkami i przesyłać formularze:document.elementFromPoint(x, y).click();
https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
źródło
Tak, możesz symulować kliknięcie myszą, tworząc zdarzenie i wysyłając je:
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); }
Uważaj na użycie
click
metody na elemencie - jest ona szeroko zaimplementowana, ale nie standardowa i zawiedzie np. W PhantomJS. Zakładam, że implementacja jQuery.click()
robi dobrze, ale nie potwierdziła.źródło
$.click()
initMouseEvent
został wycofany: developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…initMouseEvent
, możesz użyć.var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
Jest to również pokazane na stackoverflow.com/a/36144688/384670 .To jest tylko odpowiedź torazaburo , zaktualizowana do używania obiektu 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); }
źródło
jak dla mnie działa, ale wypisuje poprawny element na konsoli
to jest kod:
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);
źródło
Ze względów bezpieczeństwa nie można przesuwać wskaźnika myszy za pomocą javascript ani symulować za jego pomocą kliknięcia.
Co próbujesz osiągnąć?
źródło
createEvent()
+initMouseEvent()