jQuery 3.5.0 发布!

发布于 作者

jQuery 3.5.0 已发布!像往常一样,该版本可在 我们的 cdn 和 npm 包管理器上获得。其他第三方 CDN 可能也会很快提供它,但请记住,我们无法控制他们的发布计划,他们需要一些时间。

我们希望您保持健康和安全,同时我们中的许多人被困在家里。在病毒肆虐全球的情况下,我们意识到 jQuery 可能不是您或您管理的网站的首要任务。当您有时间时,我们建议您查看此新版本并升级。

安全修复

此版本的主要变化是安全修复,您可能需要更改自己的代码以进行调整。原因如下:jQuery 在其 jQuery.htmlPrefilter 方法中使用正则表达式来确保所有闭合标签在传递到方法时都符合 XHTML 规范。例如,此预过滤器确保像 jQuery("<div class='hot' />") 这样的调用实际上转换为 jQuery("<div class='hot'></div>")。最近,有人报告了一个问题,表明该正则表达式可能会引入跨站点脚本 (XSS) 漏洞。

jQuery <=3.4.1 中的 HTML 解析器通常会正确处理,但存在一些边缘情况,解析可能会产生意想不到的后果。jQuery 团队一致认为有必要在次要版本中修复此问题,即使某些代码依赖于以前的行为并且可能会中断。jQuery.htmlPrefilter 函数在 3.5.0 中不使用正则表达式,并且将字符串原样传递。

如果您绝对需要旧行为,使用最新的 jQuery migrate 插件 提供了恢复旧 jQuery.htmlPrefilter 的函数。在包含插件后,您可以调用 jQuery.UNSAFE_restoreLegacyHtmlPrefilter(),jQuery 将再次确保符合 XHTML 规范的闭合标签。

但是,为了正确地清理用户输入,我们还建议使用 dompurify 并使用 SAFE_FOR_JQUERY 选项来清理来自用户的 HTML。如果您不需要旧行为,但仍然想清理来自用户的 HTML,则应从 jQuery 3.5.0 开始使用 dompurify 而不使用 SAFE_FOR_JQUERY 选项。有关更多详细信息,请参阅 3.5 升级指南

功能

随着我们称之为“位置选择器”的弃用以及 计划在 jQuery 4.0 中删除,我们添加了最后两个必要的替换方法。具体来说,我们添加了 .even().odd() 方法来替换 :even:odd 选择器。有了这些方法,我们就可以在 jQuery 4.0 中安全地删除这些过于复杂的选择器。

此版本中添加的另一个小功能是能够将上下文添加到 jQuery.globalEval。这是作为修复 iframe 中脚本执行错误 的一部分完成的。

修复

值得强调的一个错误是 我们修复的 Ajax 脚本传输中的一个错误。jQuery 过去会评估对脚本的任何响应,将其作为脚本,这并不总是期望的行为。这与 JSON 等其他数据类型不同,在这种情况下,这种约定是可以接受的。jQuery 3.5.0 现在只会评估成功的 HTTP 响应。

其他错误修复和改进包括 性能 改进 在 Sizzle 中,jQuery.map 中对大型数组的支持,在支持的情况下使用原生 .flat() 方法修复了 AMD 模块中的语法错误,对我们的测试基础设施进行了多项改进等等。您可以在下面找到完整的变更日志。

弃用

如果没有一些弃用,jQuery 的发布就不完整。在 jQuery 3.5.0 中,我们将 jQuery.trim 列入了弃用列表。JavaScript 自己的 String.prototype.trim() 是一个简单的替代方案。

我们还将 AJAX 事件别名 列入了弃用列表,它们可以用 .on("ajaxStart", …) 等代替。jQuery Migrate 现在会警告这些已弃用的方法,但它们将保留到 jQuery 4.0。

升级

除了不再确保与 XHTML 兼容的标签外,我们预计从 jQuery 3.0+ 版本升级时不会出现其他兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

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

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

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

您也可以从 npm 获取此版本

npm install jquery@3.5.0

精简版

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

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

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

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

感谢

感谢所有参与本次发布的人员,包括提交补丁、报告错误或测试的人员,包括 Ahmed S. El-Afifi, Michal Golebiowski-Owczarek, Wonseop Kim, Dave Methvin, Shashanka Nataraj, Pat O’Callaghan, Sean Robinson, Christian Oliff, Christian Wenz,以及整个 jQuery 团队。

我们还要感谢 Masato Kinugawa 帮助我们识别并修复本次发布中的安全问题。

变更日志

完整变更日志: 3.5.0

Ajax

  • 对于不成功的 HTTP 响应,不要执行脚本 (#4250, #4655, da3dd85b)
  • 如果存在,用 content-type 头部值覆盖 s.contentType (#4119, 065143c2)
  • 弃用 AJAX 事件别名,将内联事件/别名标记为已弃用 (7a3cf9c0)

构建

  • 解决 Travis 配置警告 (7506c9ca)
  • 为浏览器代码中的 var 声明启用 ESLint one-var 规则 (0fdfdd82)
  • 在 Travis 上测试无 Sizzle 构建 (362075ae)
  • 更新 .mailmap & AUTHORS.txt (19f2dcba)
  • 测试:修复自定义构建测试,在 Travis 上验证;命名 Travis 作业 (d525ae34)
  • 同时对精简的 jQuery 文件进行 Lint 检查 (#3075, 37df5cdf)
  • 使 Karma 在 AMD 模式下工作 (46c284b1)
  • 为精简构建创建一个 `grunt custom:slim` 别名 (4cbdc745)
  • 仅在配置中定义的浏览器上运行 Travis 上的测试 (471b0043)
  • 同时在 Firefox ESR 上运行测试 (0a73b94a)
  • 除了 8、10 和 12 之外,还在 Node.js 13 上运行测试 (64c1fcc1)
  • 删除 Gruntfile.js 中针对 Node.js 6 的解决方法 (9f4204ec)
  • 在 Travis 上同时运行 FirefoxHeadless 上的测试 (ad3c2efa)
  • 通过 ESLint 要求 Node.js 脚本中的严格模式 (ac2da4e6)
  • 支持 jquery-release –dry-run 标志 (c7a5e1bd)
  • 停止将 src/core.js 复制到发布版 (#4489, 279d2e97)
  • ESLint:禁止使用未使用的函数参数 (d7e13f12)
  • 修复 AMD var-modules 的正则表达式解析 (#4389) (36b59c96)

核心

  • Ajax:使 nonce 和 global 与主版本保持一致,修复 AMD 问题 (22bf701f)
  • 在上下文中触发 iframe 脚本,在 globalEval 中添加 doc 参数 (#4518, 3dedc3f2)
  • 弃用 jQuery.trim (#4363, 56e73e0c)
  • 在支持的情况下使用 Array.prototype.flat (#4320, 2f666c1d)
  • 实现 .even() 和 .odd() 以替换 POS :even 和 :odd (409cbda7)

CSS

  • 解决 IE/Edge 中表行上的错误 getComputedStyle (#4490, 6d31477a)

数据

  • 事件:操作:防止与 Object.prototype 冲突 (#3256, 413ff796)

文档

  • 更新指向 EdgeHTML 问题的链接以通过 Web Archive (d72faced)
  • 将指向 Homebrew 的链接从 HTTP 转换为 HTTPS (ff5a43eb)

效果

事件

  • 仅为每个匹配的窗口和文档附加一个 focusin 处理程序 (#4652, 9e15d6b4)
  • 仅将事件附加到接受数据的对象 – 真正地 (#4397, f36f6abb)

操作

  • 跳过对象元素的包装器
  • 使 jQuery.htmlPrefilter 成为一个恒等函数 (1d61fd94)

Offset

  • 将 px 字符串发送到 .css() (57038fae)

选择器

Tests

  • 在 IE 中阻止一个 focusin 测试 (1a4f10dd)
  • 将必要的 done() 调用传递给 assert.async() (5ea844f6)
  • 使支持测试在 Firefox 4x/5x/60 上通过 (f0d5ec62)
  • 跳过 Firefox 中“表行上的宽度/高度,具有幻影边框”测试 (c79e1d5f)
  • 不要在 Chrome 中卸载时测试同步 XHR (c5b48c8c)
  • 修复 Chrome for Android 中的偏移分数测试 (0c67da4b)
  • 将 Android 用户代理检测移到 iOS 之上,并将 Safari 放在最后 (6276cb2e)
  • 使支持测试接受 Safari 13 及更高版本 (8167327f)
  • 更新 npo.js 并包含未精简的源代码 (3654bc83)

Traversing

  • 修复 contents() 在 object 元素上的问题s with children in IE (90f78b9a)
  • 修复 contents() 在带有子元素的 object 元素上的问题 (#4384, 42badf34)

jQuery 3.5.0 发布!” 一条评论

  1. Thomas Connolly 发表于 说:

    我不得不从 3.5 回退到 3.4.1,因为我的 Bootstrap 4 导航栏无法正常工作。我使用的是 Rails 6,Ruby 2.7.1。这个问题你们会尽快修复吗?我很感兴趣,因为我收到 3.4.1 存在安全漏洞的通知。
    谢谢。