You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome 66.0.3359.117中window['event']异常是Bug还是新规则?

这是Chrome 66开始的有意变更,并非Bug

你观察到的这个现象是Chrome从版本66.0.3359.117开始引入的有意行为调整,不是浏览器Bug,而是针对非标准特性window.event的规范化处理。

背景说明

window.event本身并非标准DOM API,它最早是IE浏览器的私有特性,后来Chrome等浏览器为了兼容旧代码才实现了这个全局属性,但不同浏览器对它的行为实现一直没有统一标准。

Chrome 66的具体变更

在Chrome 66之前(包括你提到的Chrome 65、IE11、Edge),每次触发事件时,浏览器都会强制覆盖window.event的值,不管你之前有没有手动修改过它。比如你即使执行了window.event = undefined,下一次事件触发时,浏览器依然会把当前事件对象赋值给window.event。

但从Chrome 66开始,浏览器调整了这个逻辑:

  • 如果你没有手动修改过window.event,事件触发时浏览器依然会自动填充这个全局属性;
  • 一旦你主动将window.event设置为undefined(或其他任意值),后续事件触发时,浏览器就不会再自动给这个全局属性赋值了,它会保持你设置的状态。

这就解释了你的测试场景:

  • 首次点击button1,window.event被浏览器自动赋值为当前点击事件对象,控制台正常打印Event实例;
  • 点击button2执行window['event'] = undefined;后,Chrome记住了这个手动修改的状态,再点击button1时就不再自动填充window.event,所以控制台输出undefined。

建议的标准写法

因为window.event是非标准特性,行为差异大,推荐使用标准的事件参数方式获取事件对象,比如:

<button onclick="console.log(event)">button1</button>
<!-- 或者更规范的函数写法 -->
<button onclick="handleClick(event)">button2</button>
<script>
function handleClick(e) {
  console.log(e); // 标准方式获取事件对象,兼容性更好
}
</script>

内容的提问来源于stack exchange,提问作者Hyunwoo Hwang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:41