是否有任何方法可以让我检测按钮单击是否由真实用户执行,而不是用户已加载到其浏览器开发人员控制台或其他浏览器开发人员工具上的某种自动化方法 (javascript)?
我尝试了各种 stackoverflow 帖子中建议的以下方法,但它们似乎都不起作用。REF:如何检测 click() 是鼠标单击还是由某些代码触发?
脚本检测方法尝试并失败:
mybutton.click(function (e) {
if (!e.which) {
//Triggered by code NOT Actually clicked
alert(' e.which - not a real button click')
} else if ('isTrusted' in e && !e.isTrsuted) {
//Triggered by code NOT Actually clicked
alert(' e.isTrusted - not a real button click')
} else if (e.originalEvent === undefined) {
//Triggered by code NOT Actually clicked
alert(' e.originalEvent - not a realbutton click')
}
// else if (!e.focus) {
// //triggered // does not detect e.focus on a real btn click
// alert(' e.focus - not a realbutton click')
// }
else {
// Button hopefully clicked by a real user and not a script
}
})
如果我运行以下脚本来触发来自 Chrome 浏览器控制台的按钮单击,则上述方法都不会将其捕获为由脚本触发。
var button = document.getElementById("btnSubmit");
button.click();
==================================================== =========================
感谢您的所有回复,并感谢 stackoverflow 提供了如此出色的网站,促进了如此多的知识共享,并为我们的技术人员节省了无数小时。
看来我还是没有可靠的方法。所有 3 种浏览器(FF、IE 和 Chrome)都为用户提供了一个开发人员/控制台界面,以便在我的网页上运行/注入 javascript。似乎每种浏览器风格捕获的一些事件属性值略有不同。例如:Chrome 使用 e.screenX 捕获脚本激活 cick 和真实用户之间的差异,但在 IE 中:e.screenX 对于脚本单击(合成)和用户按钮单击具有相同的值
以下检测方法要么根本不起作用,要么在不同浏览器之间不一致: e.which e.isTrsuted e.originalEvent (event.source != window) (e.distance != null)
mousedown 事件似乎仅由真正的用户按钮单击触发,但我必须假设除了按钮单击事件之外还有一些脚本方法可以模拟 mousedown
$(me.container + ' .mybutton').mousedown(function (e) {
alert('mouseisdown real button click');
}
如果有人能找到一种可靠的方法,可以跨多个浏览器工作,检测合成(脚本)按钮单击和用户单击按钮之间的区别,那么您将获得超级英雄的地位。