SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
YAP 的前端開發
Using HTML and Adobe Flex
speaker : josephj6802@gmail.com
與傳統網頁開發有何不同?
YAP 採用 HTML+YML
Opensocial 採用 Gadget XML
Facebook 採用 FBML
Caja
(pronounced "KA-ha")
卡哈
Sanitizing JavaScript!
幫 JavaScript 消毒!
photo credit : http://www.flickr.com/photos/pinkmoose/2162958361/
Virtual Iframe!
跟 Iframe 一樣、保護網頁不被惡意程式修改
photo credit: http://www.flickr.com/photos/markybon/861751906/
無名小站的安全性演進
• 加入 Y! 前:任意使用 JavaScript 語法
惡意程式可隨意修改無名頁面,非常危險
• ’07/8/14:加上 Iframe 的限制
惡意程式無法危害無名、但仍可植入惡意程式碼危害使用者
• ’08/10/14:Iframe + 白名單 Only
保護了使用者與無名,但非常不方便
• 未來:是否採用 Caja ?
更好的解決方案!
Caja 允許在頁面上放置 Inline、Untrusted
的 HTML/CSS/JavaScript、但仍保證安
全!
解除 Iframe、白名單、JavaScript 的
限制,才能製作出有趣的應用程式!
IMPORTS___.emitCss___([ '.', ' #show-', ' ol li {n float: left;n list-style-type:
none;n margin: 0;n width: 48px;n height: 48px;n overflow: hidden;n
margin: 0 5px 5pxn}' ].join(IMPORTS___.getIdClass___()));
#show ol li {
float:left;
list-style-type:none;
margin:0;
width:48px;
height:48px;
overflow:hidden;
margin:0 5px 5px;
}
IMPORTS___.htmlEmitter___.b('h1').f(false).ih('People').e('h1').pc('n').b('div').
a('id', 'form-' + IMPORTS___.getIdClass___()).f(false).pc('n
').b('form').a('action', 'people.html')
<h1>People</h1>
<div id="form">
<form action="people.html">
$v.so('showEl', $v.cm($v.ro('document'), 'getElementById', [ 'show' ]));
$v.so('formEl', $v.r($v.cm($v.cm($v.ro('document'), 'getElementById', [ 'form' ]), 'getElementsByTagName', [ 'form' ]), 0));
$v.so('listEl', $v.r($v.cm($v.r($v.cf($v.ro('getElementsByClassName'), [ 'bd', 'div', $v.ro('showEl') ]), 0), 'getElementsByTagName', [ 'ol' ]), 0));
$v.so('errorEl', $v.r($v.cm($v.r($v.cf($v.ro('getElementsByClassName'), [ 'bd', 'div', $v.cm($v.ro('document'), 'getElementById', [ 'error' ]) ]),
0), 'getElementsByTagName', [ 'ol' ]), 0));
$v.so('statEl', $v.cm($v.ro('document'), 'getElementById', [ 'benchmark' ]));
$v.initOuter('tStart'), $v.initOuter('tEnd');
var showEl = document.getElementById('show');
var formEl = document.getElementById('form').getElementsByTagName('form')[0];
var listEl = getElementsByClassName('bd', 'div', showEl)[0].getElementsByTagName('ol')[0];
var errorEl = getElementsByClassName('bd', 'div', document.getElementById('error'))[0].getElementsByTagName('ol')[0];
var statEl = document.getElementById('benchmark');
var tStart, tEnd;
Original CSS
Original HTML
Original JavaScript
Cajoled HTML
Cajoled CSS
Cajoled JavaScript
限制 JavaScript 無法存取全域變數
Caja Resources
• Google-caja
http://code.google.com/p/google-caja/
• Caja 測試
http://cajadores.com/demos/testbed/
• 如何安裝 Caja
http://code.google.com/p/google-caja/
wiki/GettingStarted
Caja in YAP
http://developer.yahoo.com/yap/guide/what-are-cajas-limitations.html
HTML 注意事項
• <html/>,<head/>,<body/> 都不需
要,僅需撰寫 <body/> 裡面的內容。
• 外部 JavaScript 與 CSS 皆不支援。
• <object/> 與 <embed/> 皆不支
援,Flash 請用 <yml:swf/>。
• <input type=”radio”/> 在 IE 無法使
用。
• 不支援 <iframe/>
CSS 注意事項
• 常用的 CSS Hack 像是 * 或 _ 皆無法使用。
• 無法使用 Attribute Selector。
input[type=text]
• 背景圖檔需使用有 http:// 的絕對路徑(IE 目
前仍看不到)。
JavaScript 注意事項
• 無法使用 eval()
• 無法使用 document.write()
• alert() 會顯示在 Firebug Console
• 永遠用 var 宣告變數
• 無法使用 .prototype =
• 支援 setTimeout 與 setInterval
• 有插入圖檔需斷掉 src,例 s’ + ‘rc
Browser Support
大部分的瀏覽器都能正常運作
Google Chrome Firefox Opera Safari
However...
IE 6,7 的仍有問題
• background-
image 無法使用
• JavaScript 錯誤
目前仍無解,期待 YOS Team 早日修正
使用 JavaScript 函式庫
從蠻荒時代,到有了像 jQuery、YUI 等函式庫
這就是開發者的進化!
在瀏覽器上建立使用者 UI(控制項)
Def. But.Button
Label Menu
Label Text Field
Label
Label
Text Area
click me
傳統內建 UI 使用 YUI 所建立的 UI
但因為 Caja 的限制,這些函式庫都不支援了
只能回到蠻荒時代
OpenSocial & Gadget Saves!
• opensocial.*
存取使用者(VIEWER)的 Social 資料
• gadget.io.makeRequest
存取遠端資料(可跨網域)
YAP 支援
取得 OpenSocial 的資料
• opensocial 提供下列 RequestType :
• FetchPerson:單一 User Profile 資料
• FetchPeople:多個 User Profile 資料
• FetchPersonAppData:取得 Persist 資料
• RemovePersonAppdata:移除 Persist 資料
• UpdatePersonAppData:更新 Persist 資料
• FetchActivities:取得 Updates
opensocial.new%RequestType%Request
var req = opensocial.newDataRequest();
req.add(opensocial.newFetchPersonRequest(idSpec), ‘person’);
var idSpec = opensocial.IdSpec.PersonId.VIEWER;
req.add(opensocial.newFetchActivityRequest(idSpec), ‘activity’);
req.send(callback);
// 送出 request 並指定 callback function
// 可一次索取多種資料,但必須註明 label以便 callback 時區隔
// 指定索取的 user,以目前檢視者為例
// 新增一個 DataRequest 物件
function callback (resp) {
}
var personData = resp.get(‘person’).getData();
var activityData = resp.get(‘activity’).getData();
// callback
// 需指定先前定義的 label
var nickname = personData.getDisplayName();
// 取得資料
使用 gadget.io.makeRequest
可存取遠端資料、支援 OAuth
最棒的是可使用 YQL!
http://apps.yahoo.com/-ArKraz7e
YAP JavaScript
快速上手
★ 效果測試
★ 效能 Benchmark
★ 範例程式碼
使用 Adobe Flex
跳脫 Caja 的限制與不順
Why uses Flex?
• Caja 限制太多
• 瀏覽器 Issue
• 只有基礎 JavaScript 函式庫可用
• Flash 完全無 Caja 的限制
• 相較於 Flash,Flex 的框架對開發者容
易上手許多
What is Flex?
• 可以將 Flex 視為另一套 HTML/
CSS/JavaScript:Flex 由 MXML/
CSS/ActionScript 組成。
• 需要編譯成 Flash 的 SWF 檔。
• 完全是前端 UI 的製作,但提供數種
與後端資料互動的工具。
• 超級豐富的 UI 與優良的 Usability
超豐富的內建控制項、版面、導覽列、圖表
整合好的 Flex 3 SDK + Social
Flash API,歡迎下載!
http://josephj.com/lab/yap_flex_dev.zip
Hello World!
了解基本的 Flex 語法
http://josephj.com/training/flex/hello/index_sample.mxml
Basic Layout
如何處理基本 Layout
http://josephj.com/training/flex/layout/index_sample.mxml
fcsh
讓編譯速度暴走
若只用 mxmlc 做編譯,你會發現速度很慢。
因為 mxmlc 每次都重新編譯所有原始檔...
但 fcsh 會替已編譯過的檔案做 cache,
只編譯有變動的檔案,所以第二次以後的編譯
就會快上許多。(Flex Builder 內建)
fcsh ) mxmlc index.mxml
fcsh ) compile 1
-benchmark=true
使用 HTTPService 取得遠端資料
http://josephj.com/training/flex/http-service/index_sample.mxml
amfphp
與後端資料庫的讀寫,只要整理一個 PHP Class 即可
http://josephj.com/training/flex/amfphp/services/yap/demo.php
定義了 demo 類別與公開的 getData 方法
yap 為服務名稱
demo 為類別名稱
不需做任何事,就會直接顯示在列表介面上供取用
Interact with YAP
如何讓 Flex/Flash 取得YAP 的資料?
Flash : http://josephj.com/training/flex/profile/index_sample.mxml
HTML : http://josephj.com/training/flex/profile/index.php.txt
API Reference : http://developer.yahoo.com/flash/yos/classreference/
samples!
有一大堆 sample 值得你參考喔!
http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html

Mais conteúdo relacionado

Destaque

Josephj Campus Recuriting Ntu 2009
Josephj Campus Recuriting Ntu 2009Josephj Campus Recuriting Ntu 2009
Josephj Campus Recuriting Ntu 2009Joseph Chiang
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-LinkJoseph Chiang
 
YAP Applications Demo
YAP Applications DemoYAP Applications Demo
YAP Applications DemoJoseph Chiang
 
Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Joseph Chiang
 

Destaque (6)

Josephj Campus Recuriting Ntu 2009
Josephj Campus Recuriting Ntu 2009Josephj Campus Recuriting Ntu 2009
Josephj Campus Recuriting Ntu 2009
 
Open platform
Open platformOpen platform
Open platform
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-Link
 
YAP Applications Demo
YAP Applications DemoYAP Applications Demo
YAP Applications Demo
 
Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練
 
F2E for Enterprise
F2E for EnterpriseF2E for Enterprise
F2E for Enterprise
 

Semelhante a Yahoo! 應用程式 (YAP) 在前端的開發

開放原始碼 Ch3.1 mobile - oss - oss行動領域-1 (ver1.0)
開放原始碼 Ch3.1  mobile - oss - oss行動領域-1 (ver1.0) 開放原始碼 Ch3.1  mobile - oss - oss行動領域-1 (ver1.0)
開放原始碼 Ch3.1 mobile - oss - oss行動領域-1 (ver1.0) My own sweet home!
 
Koubei banquet 26
Koubei banquet 26Koubei banquet 26
Koubei banquet 26Koubei UED
 
Yui rocks
Yui rocksYui rocks
Yui rocksAdam Lu
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手Ying-Hsiang Liao
 
淡江大學 - ios+android+html5(javascript)
淡江大學 - ios+android+html5(javascript)淡江大學 - ios+android+html5(javascript)
淡江大學 - ios+android+html5(javascript)Taien Wang
 
Appcan平台介绍
Appcan平台介绍Appcan平台介绍
Appcan平台介绍36Kr.com
 
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評Charles Chuang
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍panjunyong
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型Tom Fan
 
InspireDGT_2013 HTML5的可能發展與Web Worker
InspireDGT_2013 HTML5的可能發展與Web WorkerInspireDGT_2013 HTML5的可能發展與Web Worker
InspireDGT_2013 HTML5的可能發展與Web Workerinspire digital
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
Phonagp 简介
Phonagp 简介Phonagp 简介
Phonagp 简介dong yuwei
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunnerRack Lin
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile appsAdam Lu
 
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)Will Huang
 

Semelhante a Yahoo! 應用程式 (YAP) 在前端的開發 (20)

開放原始碼 Ch3.1 mobile - oss - oss行動領域-1 (ver1.0)
開放原始碼 Ch3.1  mobile - oss - oss行動領域-1 (ver1.0) 開放原始碼 Ch3.1  mobile - oss - oss行動領域-1 (ver1.0)
開放原始碼 Ch3.1 mobile - oss - oss行動領域-1 (ver1.0)
 
Koubei banquet 26
Koubei banquet 26Koubei banquet 26
Koubei banquet 26
 
Yui rocks
Yui rocksYui rocks
Yui rocks
 
Banquet 07
Banquet 07Banquet 07
Banquet 07
 
Banquet 14
Banquet 14Banquet 14
Banquet 14
 
Html5
Html5Html5
Html5
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手
 
淡江大學 - ios+android+html5(javascript)
淡江大學 - ios+android+html5(javascript)淡江大學 - ios+android+html5(javascript)
淡江大學 - ios+android+html5(javascript)
 
Appcan平台介绍
Appcan平台介绍Appcan平台介绍
Appcan平台介绍
 
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評
NPO 網站改造觀摩賽 - Day 3 - 評審 Richard Tsai 講評
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 
Banquet 15
Banquet 15Banquet 15
Banquet 15
 
InspireDGT_2013 HTML5的可能發展與Web Worker
InspireDGT_2013 HTML5的可能發展與Web WorkerInspireDGT_2013 HTML5的可能發展與Web Worker
InspireDGT_2013 HTML5的可能發展與Web Worker
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
Phonagp 简介
Phonagp 简介Phonagp 简介
Phonagp 简介
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
 
Banquet 04
Banquet 04Banquet 04
Banquet 04
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps
 
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
 

Mais de Joseph Chiang

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsJoseph Chiang
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)Joseph Chiang
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code QualityJoseph Chiang
 
前端的未來 - 前端工程實務訓練
前端的未來 - 前端工程實務訓練前端的未來 - 前端工程實務訓練
前端的未來 - 前端工程實務訓練Joseph Chiang
 
Debugging - 前端工程開發實務訓練
 Debugging - 前端工程開發實務訓練 Debugging - 前端工程開發實務訓練
Debugging - 前端工程開發實務訓練Joseph Chiang
 
Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Joseph Chiang
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
前端工程開發實務訓練
前端工程開發實務訓練前端工程開發實務訓練
前端工程開發實務訓練Joseph Chiang
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練Joseph Chiang
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練Joseph Chiang
 
HTML 入門 - 前端工程開發實務訓練
HTML 入門 - 前端工程開發實務訓練HTML 入門 - 前端工程開發實務訓練
HTML 入門 - 前端工程開發實務訓練Joseph Chiang
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)Joseph Chiang
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎Joseph Chiang
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding SystemJoseph Chiang
 

Mais de Joseph Chiang (20)

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Let's Redux!
Let's Redux!Let's Redux!
Let's Redux!
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabs
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)
 
JavaScript Promise
JavaScript PromiseJavaScript Promise
JavaScript Promise
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
F2E, the Keystone
F2E, the KeystoneF2E, the Keystone
F2E, the Keystone
 
前端的未來 - 前端工程實務訓練
前端的未來 - 前端工程實務訓練前端的未來 - 前端工程實務訓練
前端的未來 - 前端工程實務訓練
 
Debugging - 前端工程開發實務訓練
 Debugging - 前端工程開發實務訓練 Debugging - 前端工程開發實務訓練
Debugging - 前端工程開發實務訓練
 
Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
前端工程開發實務訓練
前端工程開發實務訓練前端工程開發實務訓練
前端工程開發實務訓練
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練
 
HTML 入門 - 前端工程開發實務訓練
HTML 入門 - 前端工程開發實務訓練HTML 入門 - 前端工程開發實務訓練
HTML 入門 - 前端工程開發實務訓練
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding System
 
miiiCasa is Fun
miiiCasa is FunmiiiCasa is Fun
miiiCasa is Fun
 

Yahoo! 應用程式 (YAP) 在前端的開發