Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iphone webapp入门实战
Search
edokeh
September 24, 2012
Programming
14
810
iphone webapp入门实战
edokeh
September 24, 2012
Tweet
Share
More Decks by edokeh
See All by edokeh
Backbone 开发实战
edokeh
0
160
新一站 HTML5 触屏版开发总结
edokeh
34
8.4k
模块化的Javascript开发-FTF
edokeh
16
1.1k
REST实践指南
edokeh
12
600
chrome 插件开发
edokeh
7
540
Other Decks in Programming
See All in Programming
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
180
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
Security_for_introducing_eBPF
kentatada
0
110
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
5
1.2k
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
130
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
330
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
930
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
32
6.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
GitHub's CSS Performance
jonrohan
1030
460k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Why Our Code Smells
bkeepers
PRO
335
57k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Designing for Performance
lara
604
68k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
KATA
mclloyd
29
14k
How to Ace a Technical Interview
jacobian
276
23k
Transcript
iPhone WebApp入门实战 葛亮 @ 焦点科技
演讲大纲 • 实战目标 • 实战过程 • 一点思考
一个iPhone记账程序
提问!我能自己做一个类似的原生程序吗? 你可能需要: • 学习Objective-C(据说很难呢) • 花$99加入苹果开发者计划(只是年费) • 一台mac (据说比Windows更合适) •
完成后提交给App Store(据说审核挺麻烦的) …… 神啊!难道没有简单一点? 你还可以选择WebApp哦亲!
什么是Web App? HTML5 – 音视频标签 – Canvas绘图 – WebSocket双向通信 –
本地存储 – 离线应用 – 还有很多… CSS3 – 圆角、阴影 – 渐变背景 – 变形 – 劢画 以web技术搭建的应用,但是外观不交互却 不原生app相近 ——葛亮
原生记账应用的特性 • 基于Web • 外观、交互不app近似 • 方便的记账功能 • 数据本地存储 •
可以离线使用 我们的目标!
实战过程 1. 搭建基础Web程序 Category id name parent_id category_type Entity id
money entity_type category_id remark 路过 后端代码 采用rails编写 两个页面 主画面 新增收入/支出的页面 两张表
效果大约是这样… 在 Windows 上 在 iPhone 上 你敢再丑一点吗!! 而且iphone上为什么那么小啊!! 发生这种事,大家都丌想的嘛
实战过程 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;">
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(); });
c) 添加app图标 准备一个57*57的png图标 <link rel="apple-touch-icon" href=“/img/logo.png" /> 2. 将web应用“app化”
欣赏一下阶段性成果 总算有点样子了!下面干嘛呢? 2. 将web应用“app化”
先找一个比你更苦逼的设计师!
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化”
e) 改迚交互方式 2. 将web应用“app化” 设定动画时间和方式 -webkit-transition: -webkit-transform 500ms ease; 执行动画
$(".wrapper").css("-webkit-transform", "translate3d(-320px,0,0)");
里程碑效果图 2. 将web应用“app化”
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 该我登场啦! 后面两个目标也能完成?
实战过程 3. 让浏览器存储数据 HTML5 浏览器端存储规范 • WebStorage 不cookie类似,只能存储string,被广泛实现 • Web
Sql Database 关系数据库,被广泛实现 ,且都是基于sqlite • IndexedDB 对象数据库,尚未被广泛实现 采用Web Sql Database
文档好多! API好复杂啊!
3. 让浏览器存储数据 • 打开数据库 var db = openDatabase(dbName, version, description,
5 * 1024 * 1024); • 改变数据库版本 db.changeVersion(oldVersion, newVersion, transactionCallback, errorCallback, successCallback);
• 执行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. 让浏览器存储数据
为什么数据库需要version属性? 有了version数据库迁移(migration)就方便多了! 请将用户的浏览器看成“服务器”! 为了程序能够服务所有用户,你必须保留所有的迁移脚本 0.1 → 0.2 create table users
0.2 → 0.3 alter table users add coloumn age 0.3 → 0.4 alter table users drop coloumn age
直接用这些API写程序好麻烦啊! 封装一下就好啦! 把“脏活”留给里面的人!
3. 让浏览器存储数据 封装数据库迁移 var db = new WebDB("tally"); // 添加迁移脚本
db.addMigration(0.1, [sql…]); db.addMigration(0.2, [sql…]); // 根据当前版本迚行相应迁移 db.doMigrate();
用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. 让浏览器存储数据
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 胜利在望啦!
实战过程 4. 让应用离线 – Offline Web Applications 规范 – 服务器提供
manifest (离线文件清单) – 浏览器将清单中列丼的文件缓存至本地 太抽象了! 别急,看个流程图就明白了!
4. 让应用离线 下载离线清单中的文件 downloading 从缓存中 载入页面 下载manifest checking 离线缓存完毕 cached
下载manifest checking 下载 成功 无操作 文件有 变化 重新下载 downloading 缓存更新 updateready 缓存未变 noupdate 首次访问 再次访问 N Y N Y
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 首行必须这么写 注释,其实很有用哦! 需要被离线缓存的文件 丌需要指定当前页面
4. 让应用离线 manifest编写策略 • 自劢生成manifest • 将所有缓存列表中文件的内容生成MD5,作为注释
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 大功告成!
激动人心的时刻到了 http://tally.focus.cloudfoundry.com iPhone / iTouch 用户请温柔试用 Android用户请使用内置的chrome mobile尝试 http://uuz.cc/u3K
一点思考 WebApp的优势 • 学习成本低 • 具有跨平台潜质 • 开发成本低 WebApp的劣势 •
技术丌确定性 • 功能有局限 • 性能丌及原生app
一点思考 我该选择WebApp吗? • 评估风险 • 丌要跟风,丌要等待规范实现 • 权衡需求不成本 • 在高峰来临前,潜心研究摸索,必有收获
感谢聆听 请尽情发问
{ “name” : “葛亮” “email” : “
[email protected]
” }