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 迁移插件 提供了一个函数来恢复旧的 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 和类操作来进行网页动画更简单。除了包含 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 复制到 dist (#4489、279d2e97)
- ESLint:禁止使用未使用的函数参数 (d7e13f12)
- 修复正则表达式解析 AMD var-modules (#4389) (36b59c96)
核心
- Ajax:将 nonce & global 与 master 对齐,修复 AMD 问题 (22bf701f)
- 在 iframe 的上下文中触发 iframe 脚本,在 globalEval 中添加 doc 参数 (#4518、3dedc3f2)
- 弃用 jQuery.trim (#4363、56e73e0c)
- 在支持的情况下使用 Array.prototype.flat (#4320、2f666c1d)
- 实现 .even() 和 .odd() 来替换 POS :even 和 :odd (409cbda7)
CSS
数据
文档
效果
事件
操作
- 跳过 option 元素的选择器包装器
- 使 jQuery.htmlPrefilter 成为一个恒等函数 (1d61fd94)
偏移
- 将带有 px 的字符串发送到 .css() (57038fae)
选择器
- 将 Sizzle 从 2.3.4 更新到 2.3.5 (#4424, #4435, #4441, #4453, 04bf577e)
- 使选择器-本地的 isXMLDoc 识别 HTML 嵌入的 SVG (2d9d6d5b)
测试
- 将 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)
我不得不从 3.5 回到 3.4.1,因为我的 Bootstrap 4 导航栏无法正常工作。我使用的是 Rails 6、Ruby 2.7.1。您会很快修复这个问题吗?我感兴趣,因为我收到 3.4.1 中存在安全漏洞的通知。
谢谢。