event.isTrusted 是只读布尔属性,用于甄别事件是否源于用户真实交互(如点击、键盘输入、触摸),而非由 JavaScript 通过 dispatchEvent() 等方法模拟触发。
原生用户操作与脚本模拟的区别
浏览器原生用户操作触发的事件,其 isTrusted 值为 true,典型场景包括:
- 用户点击按钮(click)
- 用户按下键盘按键(keydown、input)
- 用户拖拽元素并释放(drop)
- 用户触屏滑动(touchend)
- 用户点击提交按钮触发的表单提交(submit)
反之,通过脚本主动创建并派发的事件,isTrusted 均为 false,例如:
- 使用 new Event('click') 配合 el.dispatchEvent()
- 使用 new MouseEvent('click', {bubbles: true}) 进行派发
- 使用 jQuery 的 $().trigger('click')(底层机制仍为 dispatchEvent)
安全特性与应用场景
isTrusted 由浏览器强制设置,无法被伪造或修改,具备高安全性。该属性常用于防止自动化脚本绕过交互校验,主要应用场景如下:
- 支付环节验证:确认“确认按钮”是否由真人点击
- 防机器人提交:在表单提交时检查 submit 事件的 isTrusted 状态
- 敏感权限操作:在执行删除、登出等操作前增加一层用户意图确认
代码示例:
button.addEventListener('click', function(e){
if(!e.isTrusted){
console.warn('事件非用户触发,拒绝执行');
return;
}
doAction();
});
注意事项与技术局限
在实际开发中需注意以下细节:
- 该属性不区分具体的输入方式,鼠标点击与键盘回车触发均被视为可信
- 部分浏览器扩展或辅助工具若通过原生事件通道触发,isTrusted 仍可能为 true
- iframe 内的事件可信度取决于内部是否由用户触发,不受父页面控制
总结而言,isTrusted 适合作为第一层轻量级校验手段,但不能替代服务端鉴权、CSRF Token 及专业人机识别等关键防护措施。

