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,则应使用 dompurify 不使用 SAFE_FOR_JQUERY
选项,从 jQuery 3.5.0 开始。有关更多详细信息,请参阅 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 复制到 dist (#4489、279d2e97)
- ESLint:禁止使用未使用的函数参数 (d7e13f12)
- 修复正则表达式解析 AMD var-modules (#4389) (36b59c96)
核心
- Ajax:将 nonce 和 global 与主分支对齐,修复 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-ed 字符串发送到 .css() (57038fae)
选择器
- 将 Sizzle 从 2.3.4 更新到 2.3.5 (#4424, #4435, #4441, #4453, 04bf577e)
- 使 selector-native 的 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)