在网页中,是否有可能使用给定的坐标来模拟JavaScript中的点击事件?
在网页中,是否有可能使用给定的坐标来模拟JavaScript中的点击事件?
你可以派发一个click事件,但这不等同于真正的点击。例如,它不能用于欺骗跨域iframe文档,让其以为被点击了。
所有现代浏览器都支持 document.elementFromPoint
和 HTMLElement.prototype.click()
,至少从 IE 6、Firefox 5、任何版本的 Chrome 开始,还有可能是您关心的任何版本的 Safari。它甚至可以跟随链接和提交表单:
document.elementFromPoint(x, y).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()
强大得多。 - Steven LuinitMouseEvent
已被弃用:https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent - vikerivar event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
代替已经不再使用的 initMouseEvent
。这个方法也在https://dev59.com/rXA75IYBdhLWcg3weY5f#36144688中有说明。 - M Katz这只是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()
。 - Valer