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 和类操作组合来进行网页动画更简单。除了包含 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://jqueryjs.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)
  • 更新到 jsdom 存储库的链接 (f7fed7ee)
  • 在 README 中使用 https 作为超链接 (763dd3fe)

测试

  • 解决 iOS 8 – 12 中最近的 XSS 测试中的故障 (ea2d0d50)
  • 添加针对最近修复的操纵 XSS 问题的测试 (58a8e879)
  • 清理新事件测试中的 `window` & `document` 处理程序 (c1c0598d)
  • 修复“jQuery.ajax() – JSONP – 同域”测试中的不稳定性 (46ba70c5)