jQuery 1.11.2 和 2.1.3 发布 - Safari 防护版

发布于 作者

节日快乐!经过对“乖孩子”和“坏孩子”名单的认真审查,我们决定在圣诞树下留下一个小礼物来结束 2014 年:jQuery 1.11.2 和 2.1.3!这些版本包含了一些错误修复,旨在改善您的跨浏览器开发体验。

此版本中最重要的修复是针对 Safari 8.0 和 7.1 中 严重 querySelector 错误 的解决方法。当这个错误出现时,我们希望它能在补丁版本中得到修复,但事实并非如此。苹果是目前为止最不透明的浏览器制造商,我们对于 此错误的 Webkit 补丁 何时会被合并到 Safari 中知之甚少。因此,我们决定在 Sizzle(jQuery 使用的选择器引擎)中进行修复。

像这样的错误强调了使用 jQuery 等库而不是直接使用 DOM API 的好处。即使是现代浏览器也可能存在长时间未修复的错误,而且仍然存在一些跨浏览器功能差异,例如广泛使用的 Android 2.3。针对罕见浏览器问题的特殊代码在您花费一整天调试由这些问题导致的自身代码中的问题之前似乎是不必要的。或者更糟糕的是,因为客户无法从旧手机访问您的网站而失去付费客户。

另一个让我们难以在 iOS 8 上测试 jQuery 的错误是 模拟器的用户代理不正确,因此 iOS 8 模拟器无法被我们的单元测试基础设施识别。针对 该问题的修复 非常简单,但苹果不会告诉我们是否可以确定它已完成。目前,我们正在手动进行 iOS 8 测试。

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

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

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

如果您愿意,可以直接从 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://jqueryjs.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%,因此实现进展顺利。

我们要感谢微软开放技术公司对 指针事件及其持续支持的辛勤工作。我们还要感谢 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 将等待测试通过传递或失败语句来解析。
  • QUnit 异步测试现在也可以使用新的 `var done = assert.async()` 方法来定义,而不是使用旧的 `stop()`/`start()` 方法,这使得它们特定于测试块。
  • QUnit.skip:此方法可用于定义未执行的测试,作为占位符或暂时禁用现有测试(而不是注释掉它)。跳过的测试仍将显示在 HTML 报告器中,并突出显示为“SKIPPED”。
  • `testId` URL 参数:单击单个测试的“重新运行”链接时,现在使用测试名称的哈希值来引用测试(称为 `testId`),而不是之前的 `testNumber`。使用哈希可以确保测试的顺序可以改变,并且 QUnit 仍然会重新运行您之前选择的相同测试。
  • CommonJS 导出:QUnit 现在也会寻找 `exports` 对象并使用它来导出自身,使 QUnit 可以在使用 `-require` 选项的 Rhino 上使用。
  • 还有一些其他较小的更改。有关完整列表,请 查看更改日志

路线图

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

标准化报告器接口

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

更好的差异输出

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

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

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

支持嵌套模块

嵌套模块(例如 Jasmine 和 Mocha 支持它)提供了更灵活的测试套件结构。有 现有的讨论和原型,但尚未达成关于 API 的共识。

对于任何重大更改,我们将采用与当前相同的迁移模型。所有向后兼容的更改将进入下一个次要版本,任何不兼容的更改将在次要版本中引入一个迁移层,在下一个主要版本中删除迁移层。

QUnit 团队

QUnit 团队也希望借此机会自我介绍

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