istrusted 是只读布尔属性,标识事件是否由真实用户交互触发:true 表示浏览器原生操作(如点击、键盘输入),false 表示脚本模拟(如 dispatchevent);其值不可伪造,常用于前端敏感操作的首层意图校验,但不可替代服务端安全机制。

event.isTrusted 是一个只读布尔属性,用于判断当前事件是否由用户真实交互(如点击、键盘输入、触摸等)触发,而不是通过 JavaScript 代码调用 dispatchEvent() 等方式**模拟生成**的。
什么是 isTrusted = true 的事件
浏览器原生用户操作触发的事件,isTrusted 值为 true。例如:
- 用户点击按钮(
click) - 用户按下键盘按键(
keydown、input) - 用户拖拽元素并释放(
drop) - 用户触屏滑动(
touchend) - 表单提交(
submit,由用户点击提交按钮触发)
什么是 isTrusted = false 的事件
所有通过脚本主动创建并派发的事件,isTrusted 均为 false。例如:
- 用
new Event('click')+el.dispatchEvent() - 用
new MouseEvent('click', {bubbles: true})派发 - 用 jQuery 的
$().trigger('click')(底层仍是 dispatchEvent) - 测试中用 Jest 或 Cypress 手动触发事件(除非使用真实用户行为 API)
注意:isTrusted 无法被伪造或修改,是浏览器强制设置的,安全可靠。
典型使用场景与建议写法
常用于防止自动化脚本绕过交互校验,比如确认「用户真的点过」才执行敏感操作:
- 支付前验证「确认按钮是否被真人点击」
- 防机器人提交:表单提交时检查
submit事件的isTrusted - 权限操作(如删除、登出)前增加一层用户意图确认
示例代码:
button.addEventListener('click', function(e) {
if (!e.isTrusted) {
console.warn('事件非用户触发,拒绝执行');
return;
}
doSensitiveAction(); // 如发起支付请求
});
需要注意的边界情况
isTrusted 不代表「用户一定有意图」,也不代表「操作绝对安全」:
- 它不区分鼠标点击还是键盘回车触发——两者都可信
- 自动播放音频/视频的
play()调用可能因策略限制失败,但isTrusted和这个无关 - 某些浏览器扩展或辅助工具触发的事件仍可能是
isTrusted === true(只要走的是原生事件通道) - iframe 中的事件,其
isTrusted取决于该 iframe 内部是否由用户触发,不受父页面控制
因此,isTrusted 适合做第一层轻量校验,但不能替代服务端鉴权、CSRF Token、人机识别等关键防护措施。










