jQuery 1.11.2 和 2.1.3 发布 – Safari 安全版

发布于 作者

节日问候!在仔细审查了“好孩子”和“坏孩子”名单后,我们决定在 2014 年的结尾留下一个小礼物:jQuery 1.11.2 和 2.1.3!这些版本包含几个错误修复,以改善您的跨浏览器开发体验。

此版本中最重要的修复是针对 Safari 8.0 和 7.1 中一个严重的 querySelector 错误的规避方案。当此错误出现时,我们希望它能在补丁版本中得到修复,但事实并非如此。Apple 是迄今为止最不透明的浏览器制造商,我们对 针对此错误的 Webkit 补丁何时会被纳入 Safari 的信息非常有限。因此,我们决定在 Sizzle 中进行补丁,Sizzle 是 jQuery 使用的选择器引擎。

像这样的错误强调了使用像 jQuery 这样的库而不是直接使用 DOM API 的好处。即使是现代浏览器也可能存在长期未修复的错误,并且在几种广泛使用的浏览器(如 Android 2.3)中仍然存在跨浏览器功能差异。针对晦涩浏览器问题的特殊代码可能看起来是不必要的,直到你花了一天的时间来调试你自己的代码中由其中一个问题引起的问题。或者更糟糕的是,因为他们无法从旧手机上使用你的网站而失去一个付费客户。

另一个使我们在 iOS 8 上测试 jQuery 变得困难的错误是 模拟器的用户代理不正确,因此 iOS 8 模拟器未被我们的单元测试基础设施识别。针对该问题的 修复非常简单,但 Apple 并没有告诉我们是否可以依赖它。目前,我们正在手动进行 iOS 8 测试。

此外,此版本还包含 jQuery 内部的几个更改,以避免不必要地持有 DOM 元素。虽然旧代码通常不会导致运行错误,但网页可能会运行缓慢并使用比必要的更多内存。

您可能会注意到我们跳过了 2.x 分支中的一个补丁版本号。我们实际上并没有跳过它,我们构建了它并发现了一个在使用 node 时导致问题的问题。(非常感谢 Denis Sokolov 立即告知我们并促使我们修复它!)与其将这些文件发送到其他 CDN,我们决定创建新版本。

就兼容性或回归问题而言,我们认为对于当前使用 1.11.1 或 2.1.1 的任何人来说,这是一个非常低风险的升级。我们正在 jQuery 3.0 之前发布此版本,以确保您可以使用 Safari 安全版本的 jQuery,而无需检查您的代码是否与 jQuery 3.0 中预期的更改兼容。如果您遇到错误,请告诉我们

您可以直接从 jQuery CDN 包含这些文件,或将它们复制到您自己的本地服务器。 1.x 分支包括对 IE 6/7/8 的支持,而 2.x 分支则不包括。

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

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

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

非常感谢所有参与此版本的人员,包括 Chris Antaki、Denis Sokolov、Jason Bedard、Julian Aubourg、Liang Peng、Michał Gołębiowski、Oleg Gaidarenko、PashaG、Richard Gibson、Rodrigo Rosenfeld Rosas、Timmy Willison 和 TJ VanToll,他们通过测试、报告错误或提交补丁来参与了此版本。

自 jQuery 上次发布以来,我们已从 Trac 安装迁移到 GitHub issues,因此目前两个错误跟踪器中都有此版本的工单。Trac 工单的引用已迁移到 GitHub issues,因此您可以使用 此 GitHub Issues 查询来查看所有工单。

感谢您的所有支持,我们将在 jQuery 3.0 中与您见面!

改进指针事件 Polyfill

发布于 作者

今天,我们很高兴地宣布 Google 已将其 指针事件 polyfill 转移到 jQuery 基金会。该 polyfill 最初由 Google 的 Polymer 团队编写,但由于 Google 已选择搁置其指针事件实现,我们参与进来以确保维护 polyfill 并使其继续成为开发人员可以使用的一种通往最终所有浏览器中原生实现的途径。非常感谢 Google 和 Polymer 团队允许我们基于他们的工作并继续开发。

jQuery 基金会一直并且继续是 标准的坚定支持者,并且我们特别支持指针事件标准,因为它将简化 Web 开发人员处理用户交互的方式。今天,开发人员被困于鼠标和触摸两种非常不同的事件模型,尽管它们有很多相似之处。结果通常是代码中存在无数的特殊情况,尤其是在设备本身从触摸中生成“假”鼠标事件时。jQuery 基金会希望推动开发人员采用这个统一的事件系统。我们的目标是让所有浏览器都以原生方式实现此标准。

就在昨天,W3C 将指针事件规范推向了 建议推荐阶段。这使指针事件更接近于完成的标准,并为浏览器提供了一个坚实的基础来实施这些 API。一些浏览器甚至已经开始实施。令人惊讶的是,Internet Explorer,指针事件的第一个实现开始于提交给 W3C 进行标准化之前,已经实现了指针事件,而 Firefox 也有一个代码库的分支正在实施指针事件,他们 打算将其移植到所有版本的 Firefox。这两个实现最近 通过了 100% 的指针事件测试套件,因此实施正在顺利进行。

我们想感谢 Microsoft Open Technologies 对 指针事件的辛勤工作和持续支持。我们还想感谢 IBM、Mozilla、Google、Dojo 和许多其他组织和个人,他们通过创建、促进和推广指针事件等新标准来帮助并继续帮助开发人员的生活变得更轻松。如果您想参与或只是想开始在您的项目中使用的指针事件,请访问新的 指针事件仓库并查看它。

QUnit 1.16 发布和路线图

发布于 作者

我们刚刚发布了 QUnit 1.16,这是该项目的一个重要里程碑。此版本引入了几个新的 API,这些 API 将在 QUnit 2.0 中成为默认设置。为了帮助迁移到这些 API,您今天就可以在 1.16 中开始使用它们。我们的 2.x 升级指南提供了您需要更改现有测试套件以使用新 API 的所有详细信息。

以下是新 API 的快速概述

QUnit.test( "assert.async() test", function( assert ) {
  var done = assert.async();
  var input = $( "#test-input" ).focus();
  setTimeout(function() {
    assert.equal( document.activeElement, input[0], "Input was focused" );
    done();
  });
});

您仍然通过调用 QUnit.test 并传递名称和回调来定义测试。回调接收一个包含所有断言方法的 assert 参数。新的 assert.async() 方法是全新的,取代了旧的 stop() 方法。返回的回调,这里命名为 done,稍后在测试完成后被调用,取代了旧的 start() 方法。

此外,QUnit 1.16 包含几个改进和新功能

  • Promise 支持:作为异步控制的增强,测试块现在可以感知 Promise,这意味着 QUnit 将等待测试使用 pass 或 fail 语句解决。
  • QUnit 异步测试也可以使用新的 var done = assert.async() 方法来定义,而不是旧的 stop()/start(),使其特定于测试块。
  • QUnit.skip:此方法可用于定义未执行的测试,作为占位符或临时禁用现有测试(而不是注释掉它)。跳过的测试仍然显示在 HTML 报告中,并突出显示为“跳过”。
  • testId URL 参数:单击单个测试的“重跑”链接时,现在使用测试名称的哈希值来引用测试,称为 testId,而不是以前的 testNumber。使用哈希值确保测试的顺序可以更改,并且 QUnit 仍然会重跑您之前选择的相同测试。
  • CommonJS 导出:QUnit 现在还查找 exports 对象并使用它来导出自身,使 QUnit 可以在 Rhino 上使用 -require 选项。
  • 还有一些小的更改。有关完整列表,请查看 changelog

路线图

对于未来的发布,我们还计划进行一些改进

标准化的报告器接口

目前,将任何单元测试库集成到其他工具(如 PhantomJS 或 browserstack-runner 或 Karma)中都需要自定义集成代码,即库和工具的组合。我们已经开始努力创建一个所有测试库都可以实现的标准化报告器接口,称为 js-reporters,供这些工具使用。在各个项目之间协调并让他们同意并实施一个共同的 API 需要时间,但将为每个人提供更好的测试基础设施。

更好的差异输出

在编写比较具有深度结构或许多属性的对象(如 Ember 模型或 Moment 实例)的单元测试时,当前的差异输出速度慢且效率低下。还有一些比较,差异很难阅读。替换差异库并实施自定义优化,例如仅显示大对象中叶节点的差异,将使 QUnit 的 HTML 报告更加方便开发人员使用。我们有一个 所有与差异相关的 issue 的列表

更好的支持编写自定义断言

自定义断言是测试套件中强大的抽象方法。它们目前使用不足。我们想 研究更好的 API 来编写自定义断言,以及现有和新 API 的更好的文档。

支持嵌套模块

嵌套模块,就像 Jasmine 和 Mocha 支持的那样,提供了在测试套件中进行结构化的更多灵活性。有 现有的讨论和原型,但尚未达成 API 共识。

对于任何破坏性变更,我们将采用我们目前正在使用的相同迁移模型。所有向后兼容的变更将包含在下一个小版本发布中,任何不兼容的变更将通过一个迁移层在一个小版本发布中引入,并在下一个大版本发布中移除该迁移层。

QUnit 团队

QUnit 团队也想借此机会介绍一下自己

在 2014 年 9 月芝加哥 jQuery 大会上,从左至右:Jörn Zaefferer、Timo “Krinkle” Tijhof、James M. Greene 和 Leonardo Balter。