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

Windows 市集應用程式開發實戰 (使用 JavaScript)

Windows 市集應用程式開發實戰 (使用 JavaScript)

MSDN 講座

Ping-Yen Tsai

December 13, 2012
Tweet

More Decks by Ping-Yen Tsai

Other Decks in Technology

Transcript

  1. 開發環境 ▪Visual Studio 2012 ▪Express 免費 ▪ Visual Studio Express

    2012 for Windows 8 ▪Windows 8 ▪Google 搜尋 Windows 8 439 ▪Enterprise 評估版 90 天免費
  2. 空⽩白應⽤用程式 ▪⽅方案總管 ▪default.html 、 default.js 、 default.css ▪本機電腦、模擬器、遠端電腦 ▪偵錯 ->

    視窗 ▪DOM 總管 ▪JavaScript 主控台 ▪ console.log ▪ Google 搜尋 JavaScript Console MSDN
  3. WINDOWS 物件 ▪不是 window 物件 ▪Windows Runtime API ▪簡稱 WinRT

    API ▪C# C++ VB JavaScript 共通 ▪不是 Windows RT
  4. 不⼀一樣 有好有壞 ▪壞的 ▪innerHTML 、 document.write 、 … 安全性限制 ▪不能嵌⼊入外部

    JavaScript ▪不能開新視窗 ▪不能將整個 App 導⾄至外部網⾴頁 ▪沒有 FLASH 、 ActiveX ▪沒有 alert() confirm() prompt()
  5. 不能開新視窗 ▪<a target="_blank" > ▪window.open() ▪moveTo() 、 moveBy() 、 resizeTo()

    、 resizeBy() ▪window.close() ▪中⽌止 App ▪ 例外使⽤用 ▪ 不可使⽤用?
  6. CONFIRM() 替代⽅方案 ▪ var md = new Windows.UI.Popups.MessageDialog('Are you OK?');


    
 md.commands.append(new Windows.UI.Popups.UICommand('Yes'));
 md.commands.append(new Windows.UI.Popups.UICommand('No'));
 
 md.showAsync().done(function (cmd) {
 console.log(cmd.label);
 });
  7. APP 內網⾴頁 WEB CONTEXT 載⼊入 ▪ms-appx-web:/// ▪三條斜線 ▪ ms-appx-web://a3001e40-c3bf-4ae9-b713-da500ca42135/ ▪

    package.appmanifest ▪ ms-appx:/// 、 ms-appdata:/// 同理 ▪⽤用 postMessage() 溝通 ▪Google 搜尋 postMessage
  8. 實例演練 ▪使⽤用 jQuery ▪jQuery.support ▪使⽤用 Google Maps JavaScript API ▪使⽤用

    YUI ▪Google 搜尋 Windows 8 Learnings ▪ 動態載⼊入 類似 AMD
  9. ECMASCRIPT 5 ▪Strict Mode ▪"use strict"; ▪Google 搜尋 mdn strict

    ▪拿掉 "use strict"; ? ▪Object ▪Google 搜尋 mdn object guide ▪getter setter
  10. CSS3 ▪Grid Layout ▪display : -ms-grid;
 -ms-grid-columns : auto 100px

    1fr 2fr;
 -ms-grid-rows : 50px 5em auto;
 -ms-grid-row : 1;
 -ms-grid-column : 1;
 -ms-grid-column-align : end;
 -ms-grid-row-align : center;
 -ms-grid-columns : 10px (250px 10px)[3]; ▪Google 搜尋 msdn Grid Layout
  11. WINDOWS LIBRARY FOR JAVASCRIPT ▪純 CSS 、 JavaScript ▪可以看、不能改 ▪JavaScript

    物件 WinJS ▪base.js WinJS ▪ui.js WinJS.UI ▪Google 搜尋 Windows API
  12. PROMISE 物件 ▪WinJS.xhr({ url: 'a.php' })
 .then(function() {
 return WinJS.xhr({

    url: 'b.php' });
 })
 .then(function() { 
 return WinJS.xhr({ url: 'c.php' });
 })
 .done(function() { 
 /* ... */
 });
  13. PROMISE 物件 ▪WinJS.Promise.join([
 WinJS.xhr ({ url: 'a.php' }),
 WinJS.xhr ({

    url: 'b.php' }),
 WinJS.xhr ({ url: 'c.php' })
 ])
 .done(function() {
 /* ... */
 });
  14. PROMISE 物件 ▪ var promise;
 
 if(type === 'A')
 promise

    = WinJS.xhr({ url : 'a.php' }).then(function(data){
 /* ... */
 });
 else
 promise = WinJS.xhr({ url : 'b.php' }).then(function(data) {
 /* ... */
 });
 
 promise.done(function(result) { /* ... */ });
  15. PROMISE 物件 ▪ var promise;
 
 if(localStorage.x)
 promise = WinJS.Promise.as(localStorage.x);


    else
 promise = WinJS.xhr({ url : 'a.php' }).then(function(data) { 
 /* ... */
 }); 
 
 promise.done(function(result) { /* ... */ });
  16. ⾃自製 PROMISE 物件 ▪var promise = new WinJS.Promise(
 function(complete, error,

    progress) {
 setTimeout(function() {
 // …
 complete('DEMO');
 }, 3000);
 }
 );
  17. 瀏覽應⽤用程式 ▪新增資料夾 /pages/page2 ▪新增 ⾴頁⾯面控制項 page2.html ▪home.js 、 page2.js 記得加上

    ▪ready : function (element, options) {
 WinJS.Utilities.query("a").listen("click", function(e) {
 e.preventDefault();
 WinJS.Navigation.navigate(e.target.href);
 }, false);}
  18. WINJS.BINDING.AS ▪ var target = document.getElementById('target'),
 a = { x

    : 1 },
 b = WinJS.Binding.as(a);
 
 b.bind('x', function(newVal, oldVal) { target.innerHTML = newVal; }); 
 console.log(target.innerHTML); // 1
 
 b.x = 2;
 console.log(target.innerHTML); // 2
 
 b.x = 3;
 console.log(target.innerHTML); // 3
  19. WINJS.BINDING.TEMPLATE ▪ <div id="temp" data-win-control="WinJS.Binding.Template" >
 <div data-win-bind="style.backgroundColor : color"

    >
 <p data-win-bind="innerHTML : x" ></p>
 <p data-win-bind="textContent : y" ></p>
 </div>
 </div>
  20. APPLICATION LIFECYCLE ▪HTML5 ▪localStorage 、 sessionStorage ▪Windows.Storage.ApplicationData.current ▪localSettings 、 roamingSettings

    ▪localFolder 、 roamingFolder 、temporaryFolder ▪WinJS.Application ▪local 、 roaming 、 temp ▪Promise
  21. CONTRACT 協定 ▪Google 搜尋 Contract msdn store ▪Search contract 搜尋協定

    ▪Share contract 分享協定 ▪Setting contract 設定協定 ▪…
  22. SHARE CONTRACT 分享協定 ▪Google 搜尋 Quickstart Sharing ▪Source App 來源

    App ▪Quickstart: Sharing content 左側下 ▪ text 、 link 、 HTML 、 image 、 file 、 … ▪Target App ⺫⽬目標 App ▪共⽤用⺫⽬目標協定 ▪share.js ▪ args.detail.shareOperation.reportCompleted()
  23. SETTINGS CONTRACT 設定協定 ▪Google 搜尋 SettingsFlyout ▪新增資料夾 html ▪新增 html/demo.html

    ▪<div data-win-control="WinJS.UI.SettingsFlyout" data-win- options="{ settingsCommandId :'demo', width :'wide' }" >
  24. SETTINGS CONTRACT 設定協定 ▪default.js ▪app.onsettings = function (args) {
 args.detail.applicationcommands

    = {
 "demo" : { title: "Demo", href: "/html/demo.html" }
 }; 
 WinJS.UI.SettingsFlyout.populateSettings(args);
 } ▪Google 搜尋 populateSettings ▪ui.js 搜尋 populateSettings
  25. WINDOWS AZURE MOBILE SERVICE ▪https://manage.windowsazure.com/ ▪Mobile Service ▪Push notifications ▪Google

    搜尋 azure push ▪Authentication ▪Microsoft 、 Facebook 、 Twitter 、 Google 帳號認證 ▪Google 搜尋 azure auth mobile
  26. WINDOWS 8 CAMP IN A BOX ▪Google 搜尋 Windows 8

    Camp in a box ▪中⽂文版?