Чи можна використовувати задані координати для імітації клацання в JavaScript на веб-сторінці?
Чи можна використовувати задані координати для імітації клацання в JavaScript на веб-сторінці?
Відповіді:
Ви можете надіслати подію клацання , хоча це не те саме, що справжній клік. Наприклад, його не можна використовувати, щоб обдурити міждоменний документ 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
Так, ви можете імітувати клацання миші, створюючи подію та відправляючи її:
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()
робить правильно, але не підтвердила.
$.click()
initMouseEvent
було припинено: developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…
initMouseEvent
ви можете використовувати var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
Це також показано в stackoverflow.com/a/36144688/384670 .
Це лише відповідь 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);
}
це не працює для мене, але друкує правильний елемент на консолі
це код:
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);
З міркувань безпеки ви не можете переміщати вказівник миші за допомогою JavaScript, а також імітувати клацання ним.
Що ви намагаєтесь досягти?
createEvent()
+initMouseEvent()