jQuery 3.5.1 已发布,此版本修复了针对 3.5.0 的回归错误。
具体来说就是,在此前的版本中将内部数据对象改为使用Object.create( null )
而非普通对象 ({}
)。之所以这样做是为了防止与 Object.prototype 属性上的 key 发生冲突。然而,这也意味着用户(尤其是插件)无法再使用原生的 .hasOwnProperty 方法来检查 jQuery 数据中的内容,导致破坏部分代码。目前已恢复了这个改动,但官方计划在 jQuery 4.0 中再放回去。这个改动也是此版本中唯一的代码改动,其他的改动包括对文档和构建系统的一些小更新。
上个版本 jQuery 3.5.0 修复了 jQuery DOM 操作方法中出现的两个安全问题,例如.html()
, .append()
以及其他的 DOM 操作方法。第一个问题已在 jQuery 3.5.0 发布公告中解释过,现在解释一下第二个安全问题。
第二个问题与第一个问题非常相似,这是一个 XSS 漏洞,与传递<option>
元素到 jQuery 的 DOM 操作方法有关。本质上,这是使用了一个正则表达式来包裹<option>
元素与<select>
元素,以确保这些元素在旧版本 IE 中得到正确解析。目前的解决方法是只在需要的地方应用这些代码。幸运的是,由于 IE9 中的解析行为不同,因此可以在 IE9 中保留这个安全修复,而不会暴露在其他浏览器的漏洞中。