event.isTrusted为true表示用户真实操作,false为脚本模拟;它是浏览器原生只读属性,用于区分人为交互与代码触发,适用于前端体验控制但不可替代后端校验。

直接看 event.isTrusted 属性就行——值为 true 表示是用户真实操作(比如手点、键盘按、触摸),false 就是脚本模拟的(比如 dispatchEvent 或 element.click())。
isTrusted 是什么
它是浏览器原生提供的只读布尔属性,写在事件对象上,不可被修改或伪造。它的设计初衷就是区分“人动”和“代码动”,属于浏览器安全机制的一部分。
- 用户点击按钮 →
click事件中event.isTrusted === true - 用
btn.dispatchEvent(new MouseEvent('click'))触发 → 对应事件的isTrusted === false - 哪怕用完整配置构造事件:
new MouseEvent('click', { bubbles: true, cancelable: true }),isTrusted依然为false
怎么在代码里用
通常放在事件处理函数开头做简单判断,适合用于防误触、防自动提交、或区分交互意图。
- 基础写法:
if (event.isTrusted) { /* 用户操作逻辑 */ } - Vue 中的
$event也是原生事件对象,同样支持:v-on:click="handleClick($event)",函数内可直接访问$event.isTrusted - 注意:不要用它做核心权限校验——后端仍需独立验证,它只适合前端体验控制
哪些场景会返回 false
凡是不经过用户物理输入通道的事件,基本都算“非可信”。常见情况包括:
立即学习“Java免费学习笔记(深入)”;
- 调用
element.click()、input.focus()等 DOM 方法 - 手动创建并派发事件:
dispatchEvent(new Event('submit')) - 测试工具(如 Puppeteer、Jest)触发的模拟事件
- 某些自动化脚本或浏览器插件注入的事件
它不是万能的,但很实用
isTrusted 不解决所有安全问题,也不能替代表单校验、CSRF 防护或服务端鉴权。但它能帮你快速识别“这次点击是不是人按的”,对优化交互反馈、防止脚本误触发、提升调试效率很有帮助。


















