【发布时间】:2011-03-17 16:23:10
【问题描述】:
是否可以使用给定的坐标来模拟网页内 JavaScript 中的点击?
【问题讨论】:
-
你的目标是什么? :) 例如,您是否尝试模拟对图像地图的点击?
标签: javascript jquery html mouseevent mouseclick-event
是否可以使用给定的坐标来模拟网页内 JavaScript 中的点击?
【问题讨论】:
标签: javascript jquery html mouseevent mouseclick-event
您可以发送 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 方法——它被广泛实施但不是标准的,并且会在例如幻影JS。我认为 jQuery 对 .click() 的实现是正确的,但尚未确认。
【讨论】:
$.click()强大得多
initMouseEvent 已被弃用:developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…
var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } ),而不是已弃用的initMouseEvent,这也显示在stackoverflow.com/a/36144688/384670中。
这只是 torazaburo's answer,已更新为使用 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()