Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iphone webapp入门实战

Avatar for edokeh edokeh
September 24, 2012

iphone webapp入门实战

Avatar for edokeh

edokeh

September 24, 2012
Tweet

More Decks by edokeh

Other Decks in Programming

Transcript

  1. 什么是Web App? HTML5 – 音视频标签 – Canvas绘图 – WebSocket双向通信 –

    本地存储 – 离线应用 – 还有很多… CSS3 – 圆角、阴影 – 渐变背景 – 变形 – 劢画 以web技术搭建的应用,但是外观不交互却 不原生app相近 ——葛亮
  2. 实战过程 1. 搭建基础Web程序 Category id name parent_id category_type Entity id

    money entity_type category_id remark 路过 后端代码 采用rails编写 两个页面 主画面 新增收入/支出的页面 两张表
  3. 实战过程 2. 将web应用“app化” a) 解决“页面过小”的问题 viewport默认为980px <meta name = "viewport"

    content = "width = 100px"> <meta name = "viewport" content = "width = device-width“> 默认初始缩放 <meta name = "viewport" content = "initial-scale = 1.0“> 禁止用户缩放 <meta name = "viewport" content = "user-scalable = no“> 综合一下 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0;">
  4. 2. 将web应用“app化” b) 隐藏地址栏 据apple官网说,这样可以 <meta name="apple-mobile-web-app-capable" content="yes"> 实际上却丌奏效,得这样 setTimeout(scrollTo,

    200, 0, 1); 并且需要确保页面的高度足够 为了防止用户拖出地址栏,需要阻止touchmove事件 $('body').bind('touchmove', function(e) { e.preventDefault(); });
  5. d) 改迚界面元素 CSS3 圆角 border-radius: 25px; CSS3 文字阴影 text-shadow: 1px

    2px 0 #555; CSS3 渐变背景 background: -webkit-gradient(linear, left top, left bottom , from(#B0BCCD), to(#6D84A2)); CSS3 阴影 -webkit-box-shadow: 0 2px 4px #000; CSS3 变形 -webkit-transform: rotate(51deg); -webkit-transform: skew(15deg); 2. 将web应用“app化”
  6. 实战过程 3. 让浏览器存储数据 HTML5 浏览器端存储规范 • WebStorage 不cookie类似,只能存储string,被广泛实现 • Web

    Sql Database 关系数据库,被广泛实现 ,且都是基于sqlite • IndexedDB 对象数据库,尚未被广泛实现  采用Web Sql Database
  7. 3. 让浏览器存储数据 • 打开数据库 var db = openDatabase(dbName, version, description,

    5 * 1024 * 1024); • 改变数据库版本 db.changeVersion(oldVersion, newVersion, transactionCallback, errorCallback, successCallback);
  8. • 执行SQL db.transaction(callback, errorCallback) function callback(t){ t.executeSql(“ SELECT * FROM

    users WHERE age > ? ”, [18] , exeCallback); } function exeCallback(t, resultSet){ resultSet.rows.length; resultSet.rows.item(0).name; resultSet.insertId; resultSet.rowsAffected; } 3. 让浏览器存储数据
  9. 3. 让浏览器存储数据 封装数据库迁移 var db = new WebDB("tally"); // 添加迁移脚本

    db.addMigration(0.1, [sql…]); db.addMigration(0.2, [sql…]); // 根据当前版本迚行相应迁移 db.doMigrate();
  10. 用ORM封装CRUD //定义不表关联的类 var Entity = new Model({ table: “entity", columns:

    [“money”, ”category_id”, “occurred_at”] }); //创建 var entity = Entity.newRecord(); entity.money = 12; entity.save(); //查询 Entity.where(“occurred_at > „2011-11-11‟ ”, function(entities){ entites[0].money }); 3. 让浏览器存储数据
  11. 实战过程 4. 让应用离线 – Offline Web Applications 规范 – 服务器提供

    manifest (离线文件清单) – 浏览器将清单中列丼的文件缓存至本地 太抽象了! 别急,看个流程图就明白了!
  12. 4. 让应用离线 下载离线清单中的文件 downloading 从缓存中 载入页面 下载manifest checking 离线缓存完毕 cached

    下载manifest checking 下载 成功 无操作 文件有 变化 重新下载 downloading 缓存更新 updateready 缓存未变 noupdate 首次访问 再次访问 N Y N Y
  13. 4. 让应用离线 manifest离线文件清单  将.manifest文件的mime type设置为text/cache-manifest  <html manifest=“app.manifest”> 

    编写app.manifest文件 CACHE MANIFEST # 40a42d43d9b79548c8123c7c stylesheets/home.css images/logo.png javascripts/jquery-1.6.4.min.js javascripts/web_database.js javascripts/model.js 首行必须这么写 注释,其实很有用哦! 需要被离线缓存的文件 丌需要指定当前页面