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.elementFromPointi 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 clickmetody 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()
initMouseEventzostał 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()