Czy możliwe jest użycie podanych współrzędnych do symulacji kliknięcia w JavaScript na stronie internetowej?
Czy możliwe jest użycie podanych współrzędnych do symulacji kliknięcia w JavaScript na stronie internetowej?
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
i HTMLElement.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
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.
$.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);
}
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);
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ąć?
createEvent()
+initMouseEvent()