Answers:
您可以调度点击事件,尽管这与实际点击不同。例如,它不能用于欺骗跨域iframe文档以使其被点击。
所有现代浏览器都支持document.elementFromPoint
和HTMLElement.prototype.click()
,因为至少IE 6,火狐5,Chrome浏览器和Safari的你很可能任何版本可能任何版本的关心。它甚至会点击链接并提交表格:
document.elementFromPoint(x, y).click();
https://developer.mozilla.org/zh_CN/DOM:document.elementFromPoint https://developer.mozilla.org/zh-CN/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()