È possibile utilizzare le coordinate fornite per simulare un clic in JavaScript all'interno di una pagina web?
È possibile utilizzare le coordinate fornite per simulare un clic in JavaScript all'interno di una pagina web?
Risposte:
Puoi inviare un evento clic , anche se questo non è la stessa cosa di un clic reale. Ad esempio, non può essere utilizzato per ingannare un documento iframe interdominio facendogli credere che è stato cliccato.
Tutti i browser moderni supportano document.elementFromPoint
e HTMLElement.prototype.click()
, a partire da almeno IE 6, Firefox 5, qualsiasi versione di Chrome e probabilmente qualsiasi versione di Safari a cui potresti interessarti. Seguirà anche collegamenti e invierà moduli:
document.elementFromPoint(x, y).click();
https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Sì, puoi simulare un clic del mouse creando un evento e inviandolo:
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);
}
Attenzione all'uso del click
metodo su un elemento: è ampiamente implementato ma non standard e non funzionerà, ad esempio, in PhantomJS. Presumo che l'implementazione di jQuery .click()
faccia la cosa giusta ma non l'ho confermata.
$.click()
initMouseEvent
è stato deprecato: developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…
initMouseEvent
puoi usare var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
Questo è anche mostrato in stackoverflow.com/a/36144688/384670 .
Questa è solo la risposta di torazaburo , aggiornata per utilizzare un oggetto 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);
}
non funziona per me ma stampa l'elemento corretto sulla console
questo è il codice:
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);
Per motivi di sicurezza, non puoi muovere il puntatore del mouse con javascript, né simulare un clic con esso.
Cosa stai cercando di ottenere?
createEvent()
+initMouseEvent()