Web Intents:Google 的内部 WebApp 互联机制

  • Jeevak Kasarkod
  • 杨晨

2011 年 8 月 7 日

话题:Java.NETRubyJavaScriptChrome语言 & 开发

Google Chrome 团队近期发布了Web Intents,这是一个 API,它允许 Web 应用集成第三方服务而不需要使用每一个第三方服务自有的 API。Web Intents 等于是 Android intents的 Web 版,它的实现原理是使用了后期运行时绑定机制,这就使得应用程序和服务之间的关系式松耦合。Web Intents 还提供了十分用户友好的机制来控制服务集成以及简化开发过程,这样就将用户置于主导位置。

在 Intents 系统中,服务将会显式地注册为使用 intents,后者只是一些泛型动作,例如编辑,查看,分享等,以及使用这些动作的数据。在运行过程中,用户需要在注册为同一个动作的多个服务中进行选择。这样被选择的应用以后就会专门负责这个动作。在现实世界中类似的情况便是使用自己的 Web 应用来发布照片,开发者与其自己编写一个集成各种各样的照片分享服务(例如Flickr 或者Picasa)的 API,还不如引入 Web Intents 系统,让自己的 Web 应用在几行代码便能完全使用浏览器的功能,这样可以将 Flickr 或者 Picasa 注册为分享服务,并且可以在之后询问用户选择默认的分享服务。不过现在没有任何一个浏览器能够完全支持这个特性,于是 Web Intents 项目使用了一个 JavaScript 插件来让 Web Intents 应用能够在 IE 8 和 9、Firefox 3 以及更高版本,Chrome 5 及更高版本和 Safari 浏览器上运行。

想象一下这样一个创业项目,开发者们要做一个在线照片存储站点,但是却资金不足:开发者不会有足够的资源向它们的应用中加入照片编辑能力,但是他们认为如果不加入这个功能的话,站点就毫无竞争力可言。Web Intents 系统仅仅以很小的代价就能够帮助他们做到这些。

var intent = new Intent(Intent.EDIT, ‘image/png’, getImageDataURI());

window.navigator.startActivity(intent, loadEditedImage);

// 这个回调函数将会在服务返回编辑好的照片数据时候调用。

function loadEditedImage(data) {

var image = document.getElementById(‘image’);

setImageData(image, data);

}

当用户访问了她最喜欢的 memegen 服务,这个站点将会使用这样的声明请求注册对”image/*”类型文件的编辑意图:

<intent

action=”http://webintents.org/edit”

type=”image/*”

/>

当用户初始化编辑动作的时候,这个服务将会调用已注册的图片编辑器。一旦用户选择了 Meme Generator,引用的站点将会在新的运行时环境中打开,并且能够加载图片数据:

var intent = window.intent;

memeImg.src = intent.data;

memegenForm.onsubmit = function() {

// 转换图片

addMemeTaglines(memeImg, memeTopText, memeBottomText);

// 将生成完毕的图片返回给客户端

intent.postResult(getImageData(memeImg));

};

一旦 postResult() 被调用,Meme Generator 运行时环境将会关闭,输出的数据会使用传递给 startActicity() 的回调函数返回给客户端。

发现:发现意图是设计为让开发者能够寻找外部服务中的 API 或者服务。

分享:分享意图是设计为让应用能够提供一个简单的机制能够分享当前页面的数据。用户可以注册任何分享的动作,包括且不限于社交网络和 Email 服务。“分享”协议可以作为一个轻量级的分享工具。

编辑:编辑意图是为了让应用能够提供一个简单的机制编辑当前页面的数据。用户可以注册任何编辑的动作,包括且不限于图片操作工具和文本编辑器。“编辑”协议可以作为一个轻量级的编辑工具。

查看:查看意图是为了让应用能够提供一个简单的机制查看应用程序中的数据。用户可以注册任何查看的动作,包括且不限于特殊的图片工具或者音频播放器。“查看”协议可以作为一个轻量级的查看工具。

挑选:挑选意图是为了让服务能够允许用户从中选出文件以供客户端应用使用。用户可以注册任何挑选的动作,包括且不限于图片画廊例如 Picasa 或者 Flickr。客户端应用可以是任何一个 Email 客户端,例如 Gmail 或者 Email。“挑选”协议可以作为一个轻量级的云文件挑选工具。

Google 正在和 Mozilla 协作以统一解决方案。Mozilla 也对这个问题非常感兴趣,并且在上个月早些时候通过它们的 Open Web App Addon 0.3 引入了Web Activities。Open Web App 生态系统包括应用程序机器的可读表单,用户的应用存储库,加载的应用程序的表盘以及支持的交互行为。这里面的表单很类似于 Web Intents 系统里面的意图。

Java.NETRubyJavaScriptChrome语言 & 开发