GoogleGears 是一个开源的浏览器扩展,用于创建可离线使用的 web 应用程序,目前尚在 beta 阶段。

其主页地址在:http://code.google.com/apis/gears/
网上论坛:http://groups.google.com/group/google-gears/
Blog: http://gearsblog.blogspot.com/ (好像暂时不能访问了。。。)

GoogleGears 主要包含3个模块:

1. 本地 web 服务器(用于提供 HTML, JavaScript, 图片等的访问请求)
2. 数据库
3. WorkerPool
  通过异步的方式在后台进行资源访问的操作(比如同步本地用户数据到服务器),
  使浏览器程序保持快速响应。

首先,需要安装 GoogleGears:
http://code.google.com/apis/gears/install.html

那么如何在自己的应用程序上线后,检查客户电脑上是否安装了 GoogleGears 呢?
首先必须在页面里面包含这一段 js:
http://code.google.com/apis/gears/tools/gears_init.js
然后,可以通过相关对象来判断并提示用户安装。
示例代码如下:

<script src="gears_init.js"></script>
<script>
  if (!window.google || !google.gears) {
    location.href = "http://gears.google.com/?action=install&message=<your welcome message>" +
                    "&return=<your website url>";
  }
</script>

我们看到其中提示用户安装的地址允许定制两个自定义信息:

message: 用户提示信息,不超过150个字。
  return:  安装完毕后返回的地址,也就是我们自己的 web 程序页面。

看一下 gears_init.js 会发现,对 Windows 而言,实际上 GoogleGears 在客户端安装了一个 ActiveX 对象:

factory = new ActiveXObject('Gears.Factory');

GoogleGears 的所有功能调用都是通过操纵该对象来完成的。

下面来学习几个例子。

1. 数据库 Demo
http://code.google.com/apis/gears/samples/hello_world_database.html

这个例子允许用户输入一些信息,并显示出最近输入的3条。在用户下次访问时仍然存在。
其界面如下:

首先在 HTML 页面里面包含如下代码,用于 gears 的安装探测,这个是每个页面必须的:

<script type="text/javascript"  src="gears_init.js"></script>

下面执行一些初始化工作,并打开数据库:

// 数据库连接对象
var db;
init();

// 打开本页面对应的本地数据库.
function init() {
  if (!window.google || !google.gears) {
    return;
  }
  try {
    db = google.gears.factory.create('beta.database', '1.0');
  } catch (ex) {
    setError('Could not create database: ' + ex.message);
  }
  if (db) {
    db.open('database-demo'); // 打开数据库
    // 创建表的语法
    db.execute('create table if not exists Demo' +
               ' (Phrase varchar(255), Timestamp int)');

// 
  }
  // 
}

获取最新的3条记录,并删除其他老的记录的实现代码:

var recentPhrases = ['', '', ''];
try {
 // 这里返回的实际上是一个记录集的游标(cursor),和 ASP 的经典写法很类似。
 var rs = db.execute('select * from Demo order by Timestamp desc');
 var index = 0;
 while (rs.isValidRow()) {
  if (index < 3) {
   recentPhrases[index] = rs.field(0);
  } else {
   // 这里可以看到 Tempstamp(时间戳)被当作主键使用了。
   db.execute('delete from Demo where Timestamp=?', [rs.field(1)]);
  }
  ++index;
  rs.next();
 }
 rs.close();
} catch (e) {
 throw new Error(e.message);
}

用户输入数据提交时,用如下逻辑实现插入数据的功能:

function handleSubmit() {
  if (!google.gears.factory || !db) {
    return;
  }

var elm = document.getElementById('submitValue');
  var phrase = elm.value;
  // 注意 getTime() 方法返回的是日期对象相当于某个基准时间的毫秒数,是一个大整数
  var currTime = new Date().getTime();

// 插入新记录
  // Gears 数据库能自动转义/反转义插入的值。
  // (The Gears database automatically escapes/unescapes inserted values.)
  db.execute('insert into Demo values (?, ?)', [phrase, currTime]);

// Update the UI.
  elm.value = '';
  displayRecentPhrases();
}

关闭浏览器后,重新打开看这个页面,果然数据还在。可以将 Google 的这个 demo 页面代码复制到本地,
打开 html 离线执行,其功能是一样的。

Google Gears 体验(1):本机数据库相关推荐

  1. Google Gears 体验(2):本机 web 服务器

    GoogleGears 的第二个官方例子: http://code.google.com/apis/gears/samples/hello_world_resourcestore.html 这个例子的 ...

  2. 用 Google Gears 增强您的 Web 应用程序

    用 Google Gears 增强您的 Web 应用程序 文档选项 未显示需要 JavaScript 的文档选项 打印本页 将此页作为电子邮件发送 样例代码 2009 年 8 月 20 日 本文将简要 ...

  3. Google Gears 指南

    Gears概述 Google Gears 是一个开源的浏览器插件,它支持用户浏览器能够使用开发者创建的基于 Gears 的离线应用.它提出了一种离线应用的思想,它的三大核心模块将帮助开发者更好地运用这 ...

  4. Android进阶之路 - 使用Stetho查看真机数据库

    起因:维护老项目,需查看本地数据库数据,起初使用了DDMS调试,但使用时发现真机需Root.而我又不想使用模拟器,在此基础下我发现了Stetho三方框架能实现我的需求,故在使用真实有效的基础下总结此篇 ...

  5. ActiveRecord.JS 与 Google Gears

    ActiveRecord是仿照Rails的ActiveRecord写的js orm框架, 我使用它操作gears 的sqlite数据库.看起来不错,但是文档比较恶心,我按照文档的操作ActiveRec ...

  6. Google Nexus 6P手机刷机+升级+降级+Root详细教程

    Google Nexus 6P手机刷机+升级+降级+Root详细教程 前言 之前的Google Nexus 6P手机系统版本是6.0.1,因为想体验下新版,就直接升级了8.0版本. 准备环境 首先你要 ...

  7. Google Gears

    Google Gears是一个开源的跨浏览器插件,让使用者可以离线上网,透过SQLite数据库让本地端能够把资料暂存起来.所以网页是透过暂存区取得的,而不是从实际的网络上取得的. HTML5也算是吸取 ...

  8. 使用 Google Gears 开发离线应用

    Google 在 2007 年 5 月发布了 Gears,它是一种为生成离线网络应用软件而开发的开源技术,Google 希望能在广大开发者的帮助下测试完善功能和发现产品的局限性.简单地说,它是 Goo ...

  9. [转载]Google用户体验设计准则

    Google用户体验团队致力于创建有用的(useful).快速的(fast).简单的(simple).有吸引力的(engaging).创新 的( innovative).适合大众的(universal ...

  10. HTML5托拽上传(XMLHttpRequest和Google Gears)

    HTML5的拖拽上传功能可拆分为两个部分实现,一个是对象的拖拽功能,另一个是上传功能.拖拽功能的实现基于HTML5 DOM对象的拖拽事件 ,FF3.6+和Chrome7+都实现了该功能,所以不用做特别 ...

最新文章

  1. zabbix监控windows(03,08)
  2. Android Launcher3(二) -- Drag拖动实现
  3. python离群点检测例子_异常点/离群点检测算法
  4. ubuntu安装高版本ruby
  5. nginx优化worker进程最大打开文件数worker_rlimit_nofile 65535
  6. Qt中QTableWidget用法总结
  7. Celery参数详解、配置参数
  8. 怎么用javascript进行拖拽(转摘)
  9. java cookie p3p_P3P script src 解决cookie存取的跨域问题 java 终极解决办法
  10. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)...
  11. 银行打电话不接有影响吗?
  12. [转载] Python 完整实现的简单遗传算法(SGA)
  13. 移动硬盘加上密码_树莓派+Seafile+移动硬盘搭建私有云
  14. EC读书笔记系列之18:条款47、48
  15. ansys通过扫掠(sweep)方法划分网格的方法
  16. Git - 设置签名(Autograph)
  17. 1756冗余_冗余电源1756-PA75R
  18. 读书笔记5 《精进:如何成为一个很厉害的人》 采铜
  19. PHP使用声网的页面录制、合流录制、单流录制
  20. 追们算法----奶牛和草丛

热门文章

  1. PDFsam Basic for mac(合并拆分PDF文档)支持m1
  2. DoYourData AppUninser Mac版(Mac应用卸载工具)
  3. Mac版微信重大更新!来刷刷朋友圈!摸鱼党福利
  4. ubuntu1604 克隆虚拟机后续:修改用户名、主机名和组名
  5. jest单元测试-作用域
  6. 您有一份Microsoft Office 365技能宝典等待签收
  7. EasyRecovery如何恢复javascript文件
  8. EasyRecovery---U盘数据恢复技巧
  9. JDK下Bin目录的工具介绍
  10. bzoj5056:OI游戏