最近,各种手机上的应用的一个强大的功能是意图(intents)。您可以注册您的应用来处理某些类型的操作,或者在您的应用中指定您正在寻找哪种支持,以完成您想要做的事情。
这在 Firefox OS 的情况下尤其重要。无论您的 Web 应用最初有多好,真正将其提升到更高水平的是与设备上的其他应用和活动进行交互。
这就是 Web 活动 发挥作用的地方。
它基本上是我们一直在开发的新 Web API 之一,旨在使 Web 作为平台变得更加强大,其理念是提供一个简单的 API 来指定活动的意图,以及声明您的应用能够处理来自其他应用的操作。
顺便说一句,如果您还没有了解 Web 应用,最好的方法可能是阅读 Web 应用入门指南。最简单的形式,Web 应用仅仅是 HTML5、CSS 和 JavaScript,以及添加的 应用清单。
Web 活动入门
您可以通过几种方式使用 Web 活动
- 调用活动并显示可以处理该活动的应用
- 在清单文件中注册您的 Web 应用的活动支持
- 动态注册活动支持
- 在该活动发生时,将处理程序附加到您的应用
调用活动
假设您的应用中有一个按钮,并且您希望能够获取图片 - 无论是来自图库、相机还是 Firefox OS 中任何其他支持该活动的应用。然后,您可以像这样调用 pick
活动
var pick = new MozActivity({
name: "pick",
data: {
type: ["image/png", "image/jpg", "image/jpeg"]
}
});
在这个示例中,我们指定名称 pick
和数据为 PNG 或 JPEG 图像。然后,您将看到 Firefox OS 中可用活动的菜单
作为用户,您可以选择要从中选择图片的应用 - 或使用相机拍照 - 并且一旦完成,结果将发布回请求的应用(注意:由处理活动的应用选择是否以及将返回什么内容)。
处理响应
对于大多数 Web API(包括 Web 活动),您将拥有 onsuccess
和 onerror
事件处理程序。在图像/文件的情况下,您将获得一个 Blob 返回。然后,您可以直接在您的应用中直观地表示返回的图像
pick.onsuccess = function () {
// Create image and set the returned blob as the src
var img = document.createElement("img");
img.src = window.URL.createObjectURL(this.result.blob);
// Present that image in your app
var imagePresenter = document.querySelector("#image-presenter");
imagePresenter.appendChild(img);
};
pick.onerror = function () {
// If an error occurred or the user canceled the activity
alert("Can't view the image!");
};
注册您的应用以处理某个活动
如上所述,您还可以将您的应用设置为某些活动的处理程序。有两种方法可以做到这一点
通过清单文件 - 声明注册
{
"name": "My App",
"description": "Doing stuff",
"activities": {
"view": {
"filters": {
"type": "url",
"url": {
"required": true,
"regexp":"/^https?:/"
}
}
}
}
}
注册活动处理程序 - 动态注册
var register = navigator.mozRegisterActivityHandler({
name: "view",
disposition: "inline",
filters: {
type: "image/png"
}
});
register.onerror = function () {
console.log("Failed to register activity");
}
然后处理活动
navigator.mozSetMessageHandler("activity", function (a) {
var img = getImageObject();
img.src = a.source.url;
/*
Call a.postResult() or a.postError() if
the activity should return a value
*/
});
可用活动
目前可供选择的活动有:
- 配置
- 成本控制/余额
- 成本控制/数据使用
- 成本控制/电话
- 拨号
- 新建(例如,类型:“websms/sms”、“webcontacts/contact”)
- 打开
- 选择(例如,类型:“image/png”)
- 录制
- 保存书签
- 分享
- 测试
- 查看
一些示例
拨号
var call = new MozActivity({
name: "dial",
data: {
number: "+46777888999"
}
});
新建短信
var sms = new MozActivity({
name: "new",
data: {
type: "websms/sms",
number: "+46777888999"
}
});
新建联系人
var newContact = new MozActivity({
name: "new",
data: {
type: "webcontacts/contact",
params: { // Will possibly move to be direct properties under "data"
giveName: "Robert",
familyName: "Nyman",
tel: "+44789",
email: "robert@mozilla.com",
address: "Sweden",
note: "This is a note",
company: "Mozilla"
}
}
});
查看 URL
var openURL = new MozActivity({
name: "view",
data: {
type: "url", // Possibly text/html in future versions
url: "http://robertnyman.com"
}
});
保存书签
var savingBookmark = new MozActivity({
name: "save-bookmark",
data: {
type: "url",
url: "http://robertnyman.com",
name: "Robert's talk",
icon: "http://robertnyman.com/favicon.png"
}
});
立即试用!
您可以立即尝试一下,方法是 开发一个 Web 应用 并调用 Web 活动。然后,您可以在 Firefox OS 模拟器 中测试它!
正在开发中
Web 活动正在开发中,活动名称、数据类型等可能会发生变化。但是,目前上述大多数内容都可以正常工作(除了 mozRegisterActivityHandler
和 mozSetMessageHandler
,它们尚未实现)。
我希望您能与我一起对 Web 活动提供的所有可能性感到兴奋,并且可能想到许多用例,通过与其他应用的交互使您的应用更加强大!
关于 Robert Nyman [名誉编辑]
Mozilla Hacks 的技术布道师和编辑。进行关于 HTML5、JavaScript 和开放 Web 的演讲和博客分享。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发布博客,并且热爱旅行和结识新朋友。
33 条评论