This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:37.
Address: https://crxdoc-zh.appspot.com/apps/offline_apps.html
Title: 首先考虑离线 - Google Chrome 应用开发文档(非官方中文版)  •  Size: 33363

首先考虑离线

由于因特网连接可能会不稳定或者不存在,您需要首先考虑离线:假设没有因特网连接的条件下编写您的应用。一旦您的应用能够在离线状态下工作,添加任何需要的网络功能,使您的应用在在线状态下做更多事情。继续阅读,了解有关实现离线可用应用的技巧。

概述

Chrome 应用程序本身具有以下特性:

然而这些能力不足以保证您的应用能够离线工作。您的离线可用的应用应该遵循这些规则:

尽可能使用本地数据
从因特网使用资源时,通过 XMLHttpRequest 来获取它,并在本地保存数据。您可以使用 Chrome 浏览器的存储 API、IndexedDB 或文件系统 API 在本地保存数据。
将您的应用的用户界面与它的数据分开
将用户界面与数据分离不仅可以改善您的应用的设计,简化启用离线支持的任务,还能让您提供用户数据的其他视图。MVC 框架可以帮助您保持用户界面与数据的分离。
假定您的应用可以在任何时候关闭
保存应用状态(尽可能本地与远程同时保存)以便用户可以随时从离开的地方继续。
充分测试您的应用
确保您的应用程序在常见与特殊的情形下都能正常工作。

安全性限制

Chrome 应用对资源存放的位置有一些限制:

然而您可以从外部站点加载大型媒体资源,例如视频与声音。这一例外的一个原因是当应用只有有限的或根本没有网络连接时,<video> 与 <audio> 元素有良好的应变行为,另一个原因是目前通过 XMLHttpRequest 和 Blob URL 获取并托管媒体时不支持流处理或部分缓冲。

要提供一个受沙箱保护的 iframe,您可以创建一个 <object> 标签,它的内容可以来自远程,但是它不能直接访问 Chrome 浏览器的应用 API(参见嵌入外部网页)。

对 Chrome 应用的部分限制由内容安全策略(CSP)强制实施, Chrome 应用的策略永远是如下内容,不能修改:

default-src 'self';
connect-src *;
style-src 'self' blob: data: filesystem: 'unsafe-inline';
img-src 'self' blob: data: filesystem:;
frame-src 'self' blob: data: filesystem:;
font-src 'self' blob: data: filesystem:;
media-src *;

指定 offline_enabled

默认情况下假定您的应用在离线状态下能很好地工作。如果不是这样,您应该使用户了解这一事实,以便用户离线时执行图标可以暗色显示。如果要这么做,请在应用的清单文件中将 offline_enabled 设置为 false

{
  "name": "我的应用",
  ...
  "offline_enabled": false,
  ...
}

在本地保存数据

下表展示了您在本地保存数据的几种选择(请参见管理数据)。

API 最佳使用情形 备注
Chrome 存储 API 少量字符串数据 适用于设置与状态,方便远程同步(但不是必须的),由于配额限制不适合大量数据。
IndexedDB API 结构化数据 能够快速搜索数据,请与 unlimitedStorage 权限 一起使用。
文件系统 API 其他数据 提供一个您可以储存文件并受沙箱保护的区域,请与 unlimitedStorage 权限 一起使用。

注意:Chrome 应用不能使用网络 SQL数据库或 localStorage。WebSQL 规范目前已经弃用,而 localStorage 以同步方式处理数据(这意味着它比较慢)。存储 API 以异步方式处理数据。

在远程保存数据

总的说来,如何在远程保存数据取决于您,但是一些框架与 API 可能会有所帮助(参见 MVC 架构)。如果您使用 Chrome 浏览器的存储 API,那么所有可同步的数据都将在应用在线并且用户登录至 Chrome 的任何时候自动同步。然而,注意如果用户卸载了您的应用,用户的同步数据也将删除。 {QUESTION: true?}

考虑在您的应用卸载后用户数据至少保留 30 天,这样用户如果重新安装您的应用的话也会有良好的体验。

将数据与用户界面分离

使用 MVC 框架可以帮助您设计与实现您的应用,使数据与应用的数据视图完全分离。请参见 MVC 架构了解 MVC 框架列表。

如果您的应用与自定义服务器交互,服务器应该向您提供数据,而不是 HTML 片段。考虑 RESTful API。

一旦您的数据与您的应用分离,就能更容易地提供数据的替代视图。例如,您可以提供公开数据的网站视图。当您的用户不使用 Chrome 浏览器时,网站视图不仅有用,还能使搜索引擎找到数据。

测试

确保您的应用程序在以下条件下都能正常工作:

此外确保应用程序不会在用户的计算机上保存任何敏感的用户数据(例如密码)。