我正在尝试开发一个试图检测页面自动点击的库。 该库将在几个不同的页面上导入,一些将具有jquery,另一些则不会,或者将具有其他不同的库,因此我的解决方案应该是 香草javascript。
目标是有几个安全层,第一个将在javascript中,这个库不是唯一的反对自动点击的对策,但应提供尽可能多的信息。
这个想法是拦截所有人 点击 和 触摸事件 发生在页面上,如果这些事件是脚本生成的,会发生一些事情(应该是一个ajax调用,或者在表单上设置一个值,或者设置一个cookie或其他东西,这在这个阶段并不重要)。
我写了一个非常简单的脚本来检查计算机生成的点击:
(function(){
document.onreadystatechange = function () {
if (document.readyState === "interactive") {
try{
document.querySelector('body').addEventListener('click', function(evt) {
console.log("which", evt.which);
console.log("isTrusted", evt.isTrusted);
}, true); // Use Capturing
}catch(e){
console.log("error on addeventlistener",e);
}
}
}
}());
我看到这个在html页面上工作,没有任何其他的js,但是因为我添加了这个javascript来测试自动点击检测只是“没有”发生,没有任何我的意思是自动点击和检测。 如果在控制台中使用,则以下相同的代码工作正常,并且事件被截获和评估。 这是使用的脚本:
document.onreadystatechange = function () {
if (document.readyState === "interactive") {
//1 try
el = document.getElementById('target');
if (el.onclick) {
el.onclick();
} else if (el.click) {
el.click();
}
console.log("clicked")
}
//2 try
var d = document.createElement('div'); d.style.position = 'absolute'; d.style.top = '0'; d.style.left = '0'; d.style.width = '200px'; d.style.height = '200px'; d.style.backgroundColor = '#fff'; d.style.border = '1px solid black'; d.onclick = function() {console.log('hello');}; document.body.appendChild(d);
}
html页面非常简单:
<body>
<h1>Hello, world!</h1>
<div id="target"> aaaaa </div>
</body>
为了测试目的,我在头部添加了检测库,而“自动点击”代码就在后面 </body>
标签。
我想问题出现在“我如何附加事件处理程序”或“何时”,所以我要问的是我可以做些什么来“拦截点击事件”,这个想法是拦截每个元素的点击,现在和将来,我不想阻止它们,只要一定要以某种方式拦截它们。 当然,我无法拦截那些被阻止但不会冒泡的事件,但我想“尝试”让我的js“先于”任何其他事件。
你有一些吗? 理念 对这个?