jQuery 3.5.1 发布:修复一个回归问题

发布于 作者

我从来没有机会在 jQuery 的发布说明中说这句话,但愿五月四日与你同在!不久前,在一个与我们这个星系完全一样的星系中,我们发布了 jQuery 3.5.0。我们针对该版本中的一个回归问题进行了快速修复。

具体来说,我们更改了内部数据对象,使用 Object.create( null ) 代替普通对象 ({})。我们这样做是为了防止与 Object.prototype 属性上的键发生冲突。但是,这也意味着用户(尤其是插件)无法再使用原生 .hasOwnProperty() 方法检查 jQuery 数据中的内容,并且破坏了一些代码。我们已经撤销了该更改,但计划在 jQuery 4.0 中将其重新引入。这是此版本中唯一的代码更改。其他更改包括对我们的文档和构建系统的一些小的更新。

3.5.0 中的安全修复

jQuery 3.5.0 包含了对 jQuery 的 DOM 操作方法中的两个安全问题的修复,例如 .html().append() 和其他方法。这两个问题的安全公告已在 GitHub 上发布。虽然我们在 jQuery 3.5.0 博客文章中提供了第一个问题的所有细节,但我们没有提供第二个问题的所有细节,并且希望在此文章中提供这些细节。

第二个问题与第一个问题非常相似。它是一个 XSS 漏洞,与将 <option> 元素传递给 jQuery 的 DOM 操作方法有关。本质上,我们正在使用正则表达式将 <option> 元素包装在 <select> 元素中,以确保这些元素在旧版 IE(IE <= 9 在 <select> 元素外部插入 <option> 标签时,会将其内容替换为标签本身)中正确解析。

我们的修复是在需要时才应用此代码。幸运的是,由于 IE9 不同的解析行为,我们可以将修复保留在 IE9 中,而不会将其暴露于与其他浏览器相同的漏洞中。请尽快升级以避免这些漏洞。

升级

如果您尚未升级到 jQuery 3.5,请查看 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南。此外,jQuery Migrate 插件将帮助您识别代码中的兼容性问题。

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁。请尝试此新版本,并 告知我们您遇到的任何问题

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jqueryjs.cn/jquery-3.5.1.js

https://code.jqueryjs.cn/jquery-3.5.1.min.js

您也可以从 npm 获取此版本

npm install jquery@3.5.1

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jqueryjs.cn/jquery-3.5.1.slim.js

https://code.jqueryjs.cn/jquery-3.5.1.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jquery.org.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 Pierre GrimaudMichal Golebiowski-OwczarekEd Svanillajonathan 和整个 jQuery 团队。

变更日志

完整变更日志:3.5.1

构建

  • 在 Node.js 14 上进行测试,停止测试 Node.js 8 和 13 (205dd134)
  • 在 ESLint 中启用 reportUnusedDisableDirectives (b21d6710)
  • 将 3.x-stable 版本更新到 3.5.1-pre. (898784ab)

数据

文档

  • 修复错别字 (ea3766c0)
  • 更新 README 中的 jsdom 存储库链接 (f7fed7ee)
  • 在 README 中使用 https 链接 (763dd3fe)

Tests

  • 解决最近的 XSS 测试中 iOS 8 – 12 中的失败 (ea2d0d50)
  • 为最近修复的操纵 XSS 问题添加测试 (58a8e879)
  • 清理新事件测试中的 `window` 和 `document` 处理程序 (c1c0598d)
  • 修复“jQuery.ajax() – JSONP – Same Domain”测试中的不稳定性 (46ba70c5)