Firefox OS应用开发指南之预备知识

Stella981
• 阅读 640

注:这篇文章oschina上其实已经有人翻译过了。

从app****的开发环境开始

Web apps是基于标准web技术之上的应用。它们能运行在任何现代浏览器之上(一般来说对html5支持好的都是现代浏览器),并且采用你喜欢的开发工具来开发。与网站不同,web app具有如下几个典型的特征:

应用本身是由用户安装的,它们是独立的,并不依赖与浏览器窗口,同时可以在离线状态下运行。Gmail, Twitter, 和 Etherpad都是web app。

火 狐公司的web app项目为现有的网站提供了额外的机遇,让它们能变成能运行在一个丰富、有趣且强大的计算环境中的应用。这些应用能运行在桌面浏览器和移动设备中,相比 网站这种形式来说,用户更容易发现和安装它们。Web app正迅速的增加着一些出色的功能,比如,用户能在各种各样的设备之间实现数据同步。

开始之前

如果你还是第一次接触web app,那么你可以参考 implementationstate of the API.

发布app

开发一个网站app唯一要做的事情就是添加一个_app manifest_。这是一个描述你app的JSON格式文件,包括app名称,app图标,以及其他可读信息。

Manifest文件必须和你的网站在同一个域名下,且被访问的Content-Type是application/x-web-app-manifest+json的形式。(Note:现阶段FireFox不强制这么做,但是要发布在FireFox应用市场,这是必须的)。要知道关于manifest全部细节请参考:app的 manifest 文档。关于检查manifest合法性的工具的详细情况参考:Validatinga manifest.

同一网站下多个app

记住有一点很重要,这就是每个app都只能从自己的域名之下被访问。不同的app不能共享同一个域名。有一种解决这一限制的办法:不同的app关联不同的子域名。要知道更多,参考关于manifest的政策s

检查一个app****是否已经安装

当一个浏览器在加载app页面的时候,页面需要判断这个用户是否没有安装该app,通过调用checkInstalled(),判断一个app是否安装。如下:

1

2

3

4

5

6

7

8

9

10

11

varrequest =navigator.mozApps.checkInstalled(" http://path.to/my/example.webapp");

request.onsuccess =function() {

if(request.result) {

// we're installed

}else{

// not installed

}

};

request.onerror =function() {

alert('Error checking installation status: ' +this.error.message);

};

安装app

你可以直接通过你的网站来发布app。通过你的站点来测试安装是一个不错的主意。在提交app到Firefox Marketplace之前确保你的manifest文件的合法性。

只需用一个按钮或者超链接来触发如下的javascript代码:

1

2

3

4

5

6

7

varrequest =navigator.mozApps.install(" http://path.to/my/example.webapp");

request.onsuccess =function() {

//great - display a message, or redirect to a launch page

};

request.onerror =function() {

//whoops - this.error.name has details

};

触发navigator.mozApps.install()这句代码会让浏览器加载manifest(这里是example.webapp)并且询问用户是否安装。如果用户确认安装,那么这个app将被安装进浏览器。在OS X中应用将被安装到Applications目录下。

navigator.mozApps.install()的第二个参数是关于数据方面的,用于保存一些信息到用户已安装应用的数据集中。这些信息可以被同步到其他设备,应用可以通过调用getSelf()来恢复,参考:Checkingwhether the app is installed。如下:

1

2

3

4

5

6

navigator.mozApps.install(

" http://path.to/my/example.webapp",

{

user_id:"some_user"

}

);

推销你的app

Mozilla正在打造一个app的市场,一个能能管理好app的发现,排名和计费的应用市场。采用允许第三方创建自己商店的开放平台的方式,但创建自己的商店并不是必须的。

如果你想让人们为你的app付费,参考Marketplacepayments

FireFox 市场将会很快投入使用,你可以注册为应用开发人员来获得FireFox 市场的最新信息,同时获得一些关于开发app的建议。注册地址:sign upfor the Apps Developer newsletter

离线运行和使用高级api

现代浏览器增加了很多新的特性来支持离线运行和本地话操作。这里是一些有用的连接:

离线运行:使用HTML5 appcache的demo;

联网与断网事件:检测设备的离线与在线状态

在应用中使用音频和视频

用 Canvas画图

使用 WebGL绘制3D图形

使用 Content-Editable来为app创建功能全面、快速的富文本编辑器

通过HTML5 的api在web应用中使用文件系统

使用 Drag 和 Drop来拖动程序中的元素

检测设备的横竖屏

在本地存储数据

本地存储的api提供了以键值对形式存储用户访问app的数据的方法。如果用户用的是现代浏览器,比如firefox 4 或者Chrome,你还能使用IndexedDB,一种高性能的结构化的客户端数据库。

如果你希望在不同设备不同app之间共享数据的话,你需要使用上面提到的install()函数的第二个参数。

例子

MozillaBallExample (使用 canvas绘图 和使用JavaScriptAPI安装app的例子)

英文原文:https://developer.mozilla.org/en-US/docs/Web/Apps/Getting_Started

译文原文:http://www.jcodecraeer.com/a/qianduankaifa/css3/2013/0603/1326.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这