关于专利的触感

发布于 作者

随着越来越多的公司进军移动领域,触控事件已成为 web 开发人员的热门话题。我们大多数人知道触控事件支持单点和多点触控跟踪。我们中的一些人知道同时处理触控和鼠标的棘手之处。很少有人知道存在多种触控事件模型,更少有人尝试同时支持多种模型。我想谈谈我们今天所处的状态,我们是如何走到今天这一步的,以及我们将来可能面临的潜在问题。

简史

早在 2007 年,苹果公司推出了 iPhone,并随之带来了触控事件。Neil Roberts 在一篇 SitePen 文章 中很好地总结了苹果的实现:“虽然 API 乍一看有些粗糙,但一旦你学会了它们,你就可以在你的应用程序中做一些惊人的事情。” 果然,我们已经看到了很多令人惊叹的事情,而对“粗糙” API 的抱怨却不多。这种模型后来被 Android、诺基亚、RIM、Opera 等公司采用。苹果的实现仍然只在他们私有的 WebKit 分支中可用;直到 2009 年底,触控事件才首次出现在主要的 WebKit 存储库中,来自 Android 的实现。

同样在 2009 年,W3C 开始讨论 DOM Level 3 事件的统一指针模型。其理念是将触控(包括多点触控)、笔/手写笔和鼠标事件合并到一个模型中,使之易于同时支持所有指针类型。然而,这被放弃了,因为当时的目的是为了尽快成为推荐标准,而将规范保持尽可能小。

两年后(2011 年 3 月),Mozilla 发布了 Firefox 4,其中包含了他们自己的触控事件版本。Mozilla 模型与鼠标事件模型和被放弃的 W3C 模型更接近,因为事件对象是扁平的;event.pageX 这样的属性存在,并且没有触控列表。如果你想跟踪多个触控,你可以通过事件的 streamId 来实现。Mozilla 后来弃用了此实现,转而支持基于苹果模型的新兴 W3C 规范。

2011 年 1 月,W3C 开始草拟基于 WebKit 实现的触控事件规范。几个月后,它成为了一个工作草案,并在 12 月成为一个候选推荐。下个月,成立了一个专利咨询小组 (PAG),以调查苹果公司披露的专利。苹果公司没有参加触控事件工作组 (WG),以及他们披露的专利,导致 W3C 停止了对该规范的工作,并且他们不打算在 PAG 得出结论和/或向 WG 提出建议之前继续工作。截至本文撰写之时,PAG 尚未就专利的影响做出决定,但该小组的目标是尽快得出结论。

与此同时,微软采用了不同的方法来处理触控,并在 IE10 中使用他们自己的指针事件,以及MSPointerEvent 对象。MSPointerEvent 对象与最初的 Mozilla 实现类似,因为事件对象是扁平的,并且包含一个 pointerId 属性。但是,MSPointer 与所有其他模型(它们是触控专用的)之间存在一些重要区别。

注意:以上只是 web 上触控事件的简史;如果你对触控界面的历史感兴趣,你可能想看看 Bill Buxton 的我所认识和喜爱过的多点触控系统

指针事件与触控事件

如上所述,通用指针事件(例如最初的 W3C 想法或 MSPointer)具有支持多个指针设备的优势。事实上,在运行 Windows 8 的三星平板电脑上,鼠标、手写笔和手指都被规范化为 MSPointer;你甚至可以使用 pointerType 属性来确定正在使用的指针类型。除了支持所有当前的指针设备外,MSPointer 的设计方式还使得未来设备可以轻松添加,并且现有代码将自动支持新设备。更棒的是,MSPointer 事件对象与其他事件具有相同的结构,与 TouchEvent、TouchList 和 Touch 结合在一起,减少了学习曲线。

MSPointer 与触控之间另一个很大的区别是 MSPointer 支持悬停(over 和 out 事件)。虽然大多数触控设备存在硬件限制,不允许悬停,但索尼最近宣布了Xperia sola,它具有“神奇的悬浮触控技术”。这引出了一个重要问题:触控事件是针对特定类型的输入的特定设备设计的。指针事件代表了一种完全不同的 web 输入方法。虽然我们已经讨论了这将如何影响开发人员,但考虑它对硬件制造商的影响也十分有趣。为了让苹果公司在触控界面方面取得成功,他们必须创建一个新的事件模型。针对新外形因素和新输入方法的创新要么会被现有标准扼杀,要么需要一套新的 API,效仿苹果公司在 iPhone 和触控事件方面的做法。指针事件为开发人员和硬件制造商提供了一个干净的解决方案。可以想象,在几年内,开发人员可以使用指针事件作为指针的唯一事件模型,将鼠标事件留作过去。

支离破碎的未来

虽然 W3C 仍然计划继续推进触控事件规范(待 PAG 建议通过),但未来尚不清楚。即使 PAG 确定苹果的专利不适用,并且该规范成为 W3C 推荐标准,也不清楚微软是否会实现这种模型,因为在 Windows 中需要多输入事件系统。如果 W3C 要改变方向并开始指针事件规范,也不清楚苹果公司或更广泛地说 WebKit 是否会实现新的事件模型。完全有可能,即使 W3C 推荐标准出台,我们也会在数年内无法在浏览器和设备之间获得一致的事件模型。

无论 W3C 选择追求哪种模型,jQuery 都致力于填补空白,就像我们对提交和更改等其他事件所做的那样。我们认为指针事件模型更易于使用,并且更具前瞻性,我们希望它能够得到标准化,即使触控事件也得到标准化。然而,我们只对规范化为 W3C 推荐标准感兴趣,如果不存在官方的 W3C 规范,我们将不会提供自定义指针事件。我们正在与 W3C 和微软合作,试图找到对我们的用户和开放网络最佳的解决方案。

行动号召:微软提交指针事件提案

我们想公开呼吁微软向 W3C 提交指针事件提案。触控事件工作组,以及更广泛地说,各种浏览器供应商,都对指针事件表示了兴趣。最有效的方式是微软正式向 W3C 提交提案。

行动号召:社区尝试两种事件模型

我们还鼓励社区尝试触控和 MSPointer。使用 API,构建应用程序,并提供反馈。如果你对此感兴趣,但没有必要的硬件,可以考虑与一位或多位拥有所需硬件的本地开发人员合作。虽然有很多开发人员在触控的基础上构建,但很少有人在 MSPointer 的基础上构建,更少有人公开比较它们。我们鼓励你将你的反馈直接发送到W3C public-webevents 邮件列表,但请随时在此处留下反馈,我们将转达。

行动号召:提交现有技术

如果你知道任何关于多点触控/触控列表的现有技术,即使是在 web 领域之外,也请与 W3C 取得联系。这包括编程模型和 API,特别是那些使用事件的 API。这将有助于专利咨询小组更快地得出结论。再次说明,如果你更愿意在此处留下评论,我们将转达。