jQuery 1.12 及其以后版本中的浏览器支持
随着微软本月停止对 Windows XP 的支持,我们正在为 jQuery 社区提供关于浏览器支持变更的长期预告。
首先,不要惊慌!至少在未来六个月内,jQuery 可以运行的浏览器不会有任何真正改变。我们的目标是让 Web 开发社区中的每个人都知道 jQuery 团队在未来一年打算做什么,以便你们可以相应地进行计划。
发生了什么变化?
虽然没有确切日期,但我们计划在今年发布 jQuery 核心版本 1.12 和 2.2。jQuery 1.13/2.3 将在 2015 年的某个时候发布。
jQuery 1.12:这将是最后一个支持 Internet Explorer 6 和 7 的版本。从今天起,将不再为它们添加任何功能请求或错误修复。只有针对这些浏览器的严重回归将被修复在补丁版本中(例如,1.12.1)。jQuery 1.13 将支持 IE8 作为其最低浏览器。
jQuery 1.12 和 2.2:这将是最后一个支持 Opera 12.1x 和 Safari 5.1 的版本。从今天起,将不再为它们添加任何功能请求或错误修复。只有针对这些浏览器的严重回归将被修复在补丁版本中(例如,1.12.1 或 2.2.1)。
jQuery 1.13 和 2.3:我们将删除针对不再支持的浏览器的 API 符合性而进行的特定补丁和解决方法,以简化代码库。
你需要做什么:如果你的项目使用一个拉取最新版 jQuery 的包管理器,请记住,从 1.12 到 1.13 或 2.2 到 2.3 的升级将减少浏览器覆盖率。如果需要支持旧版浏览器,你可能需要停留在 1.12 或更低版本。有关如何执行此操作的详细信息,请参阅包管理器的说明。
“支持”的含义
定义“支持”的含义比你想象的要棘手。在“未测试的代码是损坏的代码”的前提下,jQuery 核心团队更愿意说,如果项目定期针对该浏览器运行单元测试,我们完全支持该浏览器。单元测试确保每个 API 在所有浏览器中返回一致的结果集。
即使我们支持一个浏览器,也可能存在我们无法合理修复的错误。例如,Internet Explorer 6 到 11 异步触发焦点和模糊事件,而使它们看起来同步所需的代码将非常重要。iOS 上的 Safari 不支持onbeforeunload
事件,这几乎不可能进行填充。直到上个月,Firefox 不尊重fieldset
元素上的overflow: hidden
。我们努力与浏览器供应商合作来修复这些错误。
对于我们没有正式支持的浏览器,我们仍然努力消除“致命错误”,例如在初始化期间导致页面完全无法使用的脚本错误。如果你想看看我们为了解决模糊问题所做的努力,看看这个在日本手机上导致 Android 2.3 崩溃的浏览器错误,它非常间歇性且难以诊断。在一些用户的帮助下,我们能够追踪并解决这个问题。
归根结底:我们只能确保对我们持续进行单元测试的浏览器和环境提供高质量的持续支持。但是,我们将尝试为任何流行环境中的浏览器提供一定程度的支持。最高优先级将是确保浏览器不会抛出错误。低优先级将是确保旧版或罕见的浏览器与现代浏览器产生完全相同的 API 结果。
现在谁在使用旧版浏览器?
在查看浏览器统计数据时,不要看它们现在在哪里。想想它们在 2015 年会到哪里。总而言之,我们认为到那时,所有这些浏览器在市场份额中都会降至个位数。如果来自 StatCounter 的数据可以相信,这些浏览器已经到达那里,并且当 jQuery 最终停止支持时,它们将变得更加少见。
最终,这些整个互联网的统计数据并不重要。真正重要的是你的网站访问者或 Web 应用程序用户是否运行了某个特定的浏览器。这是只有你才能回答的问题。升级到新版 jQuery 的决定始终掌握在开发人员手中。
浏览器一致性的神话
今天和未来很长一段时间,jQuery 仍然会包含数十个浏览器特定的修复程序来规范行为。在这一点上,对于 jQuery 2.x 来说,最麻烦的浏览器是 Android 2.3 中的浏览器。该版本仍然是 Android 安装基数的 20%,并且仍在新的移动产品中发布。该版本不支持一些 JavaScript 功能,例如element.classList
,它是最后几个仍然需要为标准化 CSS 属性使用-webkit-
前缀的浏览器之一。
jQuery 项目的宗旨是让你的开发生活更轻松,因此我们将继续支持修复程序,以消除流行浏览器上的不一致性。随着特定浏览器的市场份额逐渐减少到零,我们将抓住机会删除它们的补丁并停止支持它们,以精简我们的代码库。这会让所有 jQuery 页面速度更快一点。
我们是否可以使用特征检测在加载 jQuery 之前检测不支持的浏览器?我真不想求助于浏览器嗅探。从记忆来看,IE7 没有全局 JSON 对象,但 Safari 5 有,所以这本身不是一个好的标准。
我认为是这样
前端开发人员使用了很多 Internet Explorer 6。你相信吗?
很棒,jQuery 团队!很高兴看到如此有理有据,数据驱动的决定。
当我看到开头的句子“随着微软本月停止对 Windows XP 的支持……”时,我担心 jQuery 1.x 会停止支持 IE8(StatCounter 称其全球份额为 6.2%,但 Net Applications——微软参考的 ie6countdown.com 的数据提供者——称其超过 21%)。
但我应该更信任你们。干得好!
也许明年或后年,我们也能对 IE8 说再见。也许吧。
可以认为,一旦 IE8 支持被认为没有必要,jQuery 1.x 将正式结束,而 jQuery 2.x 将成为主要库吗?
@Ron,使用条件注释为 IE7 及以下版本加载 jQuery 1.12(或更低版本)。这比间接特征测试安全得多(如果另一个非 IE 浏览器不支持 window.JSON 会怎么样?)。
@Stephen 是的,这是计划。不过,我们预计不会很快发生。可能还需要几年时间……
@Ron 我认为 jQuery 不会在 Safari 5.x 中完全崩溃,我们只是会删除解决方法,因此 API 响应将有所不同。但请注意,这不会在 2015 年之前发生,我认为到那时,使用 Safari 5.x 的人不会很多。我会把它原样保留,如果 jQuery 崩溃,那么 JavaScript 将实际上失效,因此用户会得到降级体验(但如果你将页面设计为渐进增强,则仍然可以接受)。
坏主意。不要停止支持 IE7。不要这样做。将 jQuery 分成两个版本已经够糟糕了,现在还要这样做?!
Windows XP 的生命周期结束并不意味着 IE7 也结束了。请记住,IE7 是 Vista 的默认浏览器,我认为很多公司都在使用它。在决定框架中的浏览器支持时,你不能简单地依靠公共网站的全球统计数据,因为许多使用 Vista/IE7 的电脑可能甚至没有互联网连接,而且许多网站是内联网——这正是使用过时浏览器的网站类型。
此外,不支持 IE7 会忽略其本地使用情况。在一些我们西方人可能觉得陌生的国家,比如中国或印度(总共 25 亿潜在用户),人们升级的意愿并不那么强烈。
IE8+ 中的 IE 怪癖模式是否受支持?
@Richard,任何版本的 jQuery 都没有支持过怪癖模式,团队也没有针对它进行测试。请确保在文档顶部使用有效的 doctype。
@Martijn,从 1.12 回溯到 1.0 的每个版本的 jQuery 都应该在 IE6 和 IE7 上运行。您可以随意选择。看来,在这个时候支持 IE6/7 的网站可能不会对迁移到最新的 jQuery 感兴趣,因为他们的设计需要降级到最低级别才能正常工作。因此,没有必要承担大量繁琐的工作来确保这些旧浏览器正常工作。
我过去很关心支持 IE 6-8,但现在我不那么担心了。当你迁移到 IE 8+ 时,我也准备好了!