javascript - 检测按钮是点击真实用户还是由脚本触发

标签 javascript events onclick

有什么方法可以让我检测按钮点击是否由真实用户执行,而不是由用户加载到他们的浏览器开发者控制台或其他浏览器开发者工具的某种自动化方法 (javascript)?

我尝试了各种 stackoverflow 帖子中建议的以下方法,但它们似乎都不起作用。 引用:How to detect if a click() is a mouse click or triggered by some code?

尝试和失败的脚本检测方法:

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)都为用户提供了开发者/控制台界面,以便在我的网页上运行/注入(inject) javascript。似乎每个浏览器风格都会以不同的方式捕获一些事件属性值。例如:Chrome 使用 e.screenX 捕获脚本激活的点击和真实用户之间的差异,但在 IE 中:e.screenX 对于脚本点击(合成)和用户按钮点击具有相同的值

以下检测方法要么根本不起作用,要么在不同的浏览器中不一致:e.which e.isTruted e.originalEvent (event.source != window) (e.distance != null)

mousedown 事件似乎只由真正的用户按钮单击触发,但我必须假设除了按钮单击事件之外还有一些脚本方法可以模拟 mousedown

$(me.container + ' .mybutton').mousedown(function (e) { 
    alert('mouseisdown real button click'); 
}

如果有人能想出一种适用于多种浏览器的可靠方法,检测合成(脚本)按钮点击和用户点击按钮之间的区别,那么您将获得 super 英雄地位。

最佳答案

当通过鼠标单击按钮时,事件 e 通常会记录鼠标指针位置。尝试类似的东西:

   if(e.screenX && e.screenX != 0 && e.screenY && e.screenY != 0){
     alert("real button click");
   }

关于javascript - 检测按钮是点击真实用户还是由脚本触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794380/

相关文章:

javascript - 使用 Laravel 4 中的表单将 innherHtml 传递的元素上传到数据库

javascript - 基于选择下拉列表的 Angular 2-Filtering 表(两者都是不同的组件)

javascript - 如果我执行以下操作,Cloudinary API 是否安全

vb.net - VB 中的自定义事件

javascript - 从 <a> 中删除点击事件处理程序

Android Toast 消息回调或任何触摸事件

javascript - 如何调整图像大小以适合我的 Canvas ?

events - Google Maps API v3 'dragend' 事件在 map 完成滑动之前触发

Javascript:在div内的图像顶部接收onClick,可以完成吗?

javascript - 悬停切换并单击无法正常工作