关于专利的问题
随着越来越多的公司进入移动领域,触控事件已成为 Web 开发人员的热门话题。我们大多数人都知道触控事件支持单点和多点触控跟踪。我们中有些人知道同时使用触控和鼠标的棘手之处。很少有人知道存在多种触控事件模型,更少的人尝试同时支持多种模型。我想谈谈我们今天所处的状态,我们是如何走到今天的,以及我们将来可能面临的潜在问题。
简短的历史
早在 2007 年,苹果发布了 iPhone,随之而来的是触控事件。Neil Roberts 在一篇 SitePen 文章 中很好地总结了苹果的实现:“虽然 API 在一开始看起来有点粗略,但一旦你学会了它们,你就可以在你的应用程序中实现惊人的功能。” 果然,我们看到了很多惊人的事情,而且对“粗略”的 API 没有太多抱怨。这种模型后来被 Android、诺基亚、RIM、Opera 等公司实现。苹果的实现仍然只在他们的 WebKit 私有分支中可用;直到 2009 年底,触控事件才首次出现在主要的 WebKit 代码库中,来自 Android 的实现。
同样在 2009 年,W3C 开始讨论 DOM Level 3 Events 的统一指针模型。这个想法是将触控(包括多点触控)、笔/手写笔和鼠标事件合并到一个模型中,从而轻松地同时支持所有指针类型。然而,这被放弃了,因为当时的目的是为了使规范尽可能小,以便更快地成为推荐标准。
两年后(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 事件对象具有与其他事件相同的结构,与触控事件、触控列表和触控的组合相比,学习曲线更低。
MSPointer 与触控之间另一个主要区别是 MSPointer 支持悬停(over 和 out 事件)。虽然大多数触控设备都有一个硬件限制,不允许悬停,但索尼最近发布了 Xperia sola,它具有“神奇的浮动触控技术”。这提出了一个重要的问题:触控事件是根据特定设备的特定输入类型而设计的。指针事件代表了 Web 上对输入的一种完全不同的方法。虽然我们已经讨论了这对开发人员的影响,但考虑对硬件制造商的影响很有趣。为了使苹果的触控界面取得成功,他们必须创建一个新的事件模型。新的外形和新的输入方法的创新要么会被现有的标准扼杀,要么需要一套新的 API,效仿苹果的 iPhone 和触控事件。指针事件为开发人员和硬件制造商提供了一个简洁的解决方案。可以想象,几年后开发人员可以使用指针事件作为指针的唯一事件模型,而鼠标事件将成为过去式。
碎片化的未来
尽管 W3C 仍然计划继续推进触控事件规范(待 PAG 的建议),但未来尚不明朗。即使 PAG 确定苹果的专利不适用,并且规范成为 W3C 推荐标准,也不清楚微软是否会实施这样的模型,因为 Windows 需要一个多输入事件系统。如果 W3C 要改变方向,开始一个指针事件规范,也不清楚苹果,或者更广泛地说 WebKit,是否会实施新的事件模型。完全有可能,即使 W3C 推荐标准出台,我们仍然会困在几年内没有跨浏览器和设备的一致事件模型中。
无论 W3C 选择追求哪种模型,jQuery 都致力于填补空白,就像我们对其他事件(如 submit 和 change)所做的那样。我们认为指针事件模型更容易使用,而且更具未来性,我们希望它能够成为标准,即使触控事件也成为标准。但是,我们只对规范化 W3C 推荐标准感兴趣,如果没有任何官方的 W3C 规范,我们将不会提供自定义的指针事件。我们正在与 W3C 和微软合作,努力寻找对我们的用户和开放 Web 最好的前进道路。
行动号召:微软提交指针事件提案
我们希望公开呼吁微软向 W3C 提交一个关于指针事件的提案。触控事件工作组,以及更广泛的浏览器供应商,都表示对指针事件感兴趣。最有效的方式是让微软正式向 W3C 提交一个提案。
行动号召:社区尝试两种事件模型
我们还鼓励社区尝试触控和 MSPointer。使用 API,构建应用程序并提供反馈。如果你有兴趣,但没有必要的硬件,请考虑与一位或多位当地的开发人员配对。虽然有很多开发人员在触控的基础上构建,但很少有人在 MSPointer 的基础上构建,更少的人公开比较它们。我们鼓励你将反馈直接发送到 W3C public-webevents 邮件列表,但随时可以在这里留下反馈,我们将转达给你。
行动号召:提交现有技术
如果你知道任何关于多点触控/触控列表的现有技术,即使是在 Web 之外,也请与 W3C 联系。这包括编程模型和 API,尤其是使用事件的那些模型和 API。这将有助于专利咨询小组尽快得出结论。再次说明,如果你想在这里留下评论,我们将转达给你。
它并不完全直接与触控/触控列表相关,但 http://icculus.org/manymouse/ 肯定早于苹果的专利,并且是在一个宽松的 (ZLIB) 许可下发布的,因此多输入的概念肯定存在于之前(2005 年)。
“早在 2007 年,苹果发布了 iPhone,随之而来的是触控事件。”
那么 Windows Mobile 或更早的 Windows CE(如 HP Jornada)下的智能设备呢?第一款(Jornada 820)发布于 1998 年,并配备了触摸屏。在他们的竞争对手推出约 10 年后,苹果完成了这项工作。
不要忘记,苹果从来没有创造过什么。
Scott,感谢你如此清晰且客观地解释了触控事件的来源、当前的状况以及我们如何前进。它鼓励普通的设计师和开发者了解 jQuery 团队正在展望未来,接触主要参与者,并让社区参与进来。
“在 4 月 14 日,苹果公司披露了 3 项关于触控事件规范的额外专利申请。
Web 事件的专利状态页面 [1] 指出,这 3 项新披露的专利都“没有免版税承诺””
苹果公司:针对触控事件的 3 项额外专利申请,不提供免版税许可条款
http://lists.w3.org/Archives/Public/public-webevents/2012AprJun/0000.html
我认为快速浏览一下维基百科,你会发现欧洲核子研究组织、惠普、Fairlight 都使用触摸屏技术来进行控制和系统交互。我还记得在 CEGB 的一个颜色图形终端中,将一个电阻式触摸屏与一个 IO Research Pluto 图形板集成在一起。所以肯定有许多人拥有更早的技术。
当然,算盘就是一个多点触控列表设备的例子。
很容易去谈论苹果是如何创造了一些东西的,但正如有人所说,像 Windows CE 在 90 年代就有了类似的东西。
这就像 AJAX,微软是第一个开发和使用它的公司之一,他们在 1998 年使用它创建了微软 Outlook Web Access,在那里你的收件箱可以显示/刷新而无需更改整个页面,而且他们没有使用框架。
但他们几年后就放弃了这个想法 :(
我完全支持创建 Web 标准,但就目前而言,什么时候会将对所有当前 API 的支持构建到 jQuery 核心?我现在正在制作几个响应式网站,我希望它们可以在 iOS、Android 和 Windows 8 上运行。在这方面有什么进展吗?(像 jQuery Mobile 这样的仅限移动端的框架完全不适用,像 jQuery UI 这样的“全能”框架也不适用)
@Charles 我不确定你指的是“对所有当前 API 的支持”,但我可以向你保证,答案永远是不会。核心不会继续增长。响应式设计与指针设备无关。jQuery Mobile 绝不是仅限移动端的框架。jQuery UI 并不是一个“全能”框架。我对你的评论非常困惑。