我有以下按钮:
<input type="button" disabled onClick=document.location.href="?hash=blabla" tabindex="-1" class="btn btn-transparent btn-xs cbut0" />
现在该按钮已被禁用,并使用另一个脚本在鼠标悬停事件上重新启用它,但是用户似乎仍然可以通过加载简单的外部 JavaScript 以编程方式单击该按钮,例如:
window.onload = setTimeout(function(){
$('input.btn.btn-transparent').click();
}, 10000);
有什么方法可以防止这种行为,以某种方式确保按钮是通过鼠标而不是通过某些脚本单击的?
我找到了一些线索禁用的按钮仍然会使用“.click()”触发 https://stackoverflow.com/questions/28213070/disabled-button-still-fires-using-click但在我的案例中未能实现。
您可以利用isTrusted
的财产event
。
看一下MDN https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted.
Event 接口的 isTrusted 只读属性是一个布尔值,当事件由用户操作生成时为 true,当事件由脚本创建或修改或通过dispatchEvent 调度时为 false。
Demo
function changeHash(event) {
if (event.isTrusted) {
alert("Trusted");
} else {
alert("Programmatically triggered");
}
}
function triggerClick() {
document.getElementById('btn').click();
}
<input type="button" id="btn" onClick="changeHash(event)" tabindex="-1" class="btn btn-transparent btn-xs cbut0" value="change">
<button onclick="triggerClick()">Trigger click</button>
以下是检查事件是否为可信事件的示例代码。
if ('isTrusted' in event) {
if (event.isTrusted) {
alert('The ' + event.type + ' event is trusted.');
} else {
alert('The ' + event.type + ' event is not trusted.');
}
} else {
alert('The isTrusted property is not supported by your browser');
}
因此,使用此代码,您可以像下面这样更改代码以使其正常工作。
HTML
<input type="button" disabled onClick = "changeHash()" tabindex="-1" class="btn btn-transparent btn-xs cbut0" />
JS
changeHash(event) {
if (event.isTrusted) {
document.location.href = "?hash=blabla"
} else {
event.preventDefault();
}
}
解决方法event.isTrusted
是要检查eventX
and eventY
属性如下图
changeHash(event) {
if (event.screenX && event.screenY && event.screenX != 0 && event.screenY != 0) {
document.location.href = '?hash=blabla';
} else {
event.preventDefault();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)