本文承接上篇《使用Cordova命令行界面(CLI)》。javascript
到此咱們徹底作好開發前的準備工做,Cordova應用使用常見的HTML、CSS和JavaScript開發,所以Cordova應用基本等同於Web應用。先看一些Hello World的例子,以便對Cordova應用開發的過程作一些瞭解。最後再看一下官方提供的Hello World示例。css
Cordova應用的Hello World能夠只寫一個簡單的Web頁面實現:html
<!DOCTYPE HTML> <html> <head> <titile>HelloWorld1</title> </head> <body> <h1>Hello World</h1> <p>This is a sample Cordova application</p> </body> </html>
若是想在模擬器或物理設備上看到執行效果。回憶以前的內容,按下面步驟作:java
執行效果圖以下:
jquery
以上只是對運行過程作的一個簡單的說明。若是不用Cordova run,使用IDE的調試或運行功能固然也是能夠的。關於這方面內容以後作介紹。git
示例實質上生成一個呈現web內容的原生應用,可是沒有使用Cordova框架的API,沒有體現Cordova的優點。實際上全部的web應用均可以打包到Cordova項目中,若是你有一個web應用,想以原生應用的方式在手機上運行,這也是一種實現方式。web
把上個例子的HelloWorld.html另存爲HelloWorld2.html並放到同一目錄下。向其中添加一些代碼,做用是在Cordova完成初始化時彈出一個提示窗口告知Cordova已經準備好了。完整代碼以下:apache
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-type" content="text/html;charset=utf-8"> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width;" /> <script src="cordova.js" type="text/javascript" charset="uft-8"></script> <script type="text/javascript" charset="utf-8"> function onBodyLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { navigator.notification.alert("Cordova is ready"); } </script> <title>HelloWorld1</title> </head> <body onload="onBodyLoad()"> <h1>Hello World</h1> <p>This a sample Cordova application</p> </body> </html>
截圖以下:
瀏覽器
<head>
部分新增了兩處:meta標籤描述了內容類型和viewport(視口)。內容類型是標準的HTML。而viewport告訴瀏覽器內容佔用屏幕多大面積及怎樣縮放內容。app
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width;" />
上面代碼說明html頁面佔用所有屏幕並以其100%大小呈現,而且不容許用戶以任何形式縮放頁面。
viewport和相關屬性不是必需的,若是不設置瀏覽器將使用它的默認設置。
還加載了Cordova JavaScript庫:
<script src="cordova.js" type="text/javascript" charset="uft-8"></script>
這樣就加載了核心的Cordova API庫,應用就可使用核心Cordova功能。由於3.0之後核心API遷移到了插件中,cordova.js文件只保留了一些基本功能。
Cordova應用只有在web應用加載完成纔去訪問Cordova API。原生的Cordova容器在使用JavaScript代碼調用API以前必須完成初始化。基於上述緣由開發者必須讓容器在API初始化完成後告知web應用。須要API的應用邏輯只有才接收到API可用的通知後才能執行。
在這個例子中,通知是經過添加body部分的onload事件定義完成的。
<body onload="onBodyLoad()">
在onBodyLoad函數中註冊了事件監聽器,它告訴應用在Cordova容器在完成初始化任務並觸發deviceready事件後調用onDeviceReady函數。
document.addEventListener("deviceready", onDeviceReady, false);
onDeviceReady函數簡單的顯示了Cordova警告對話框(它和JavaScript對話框不同)告知用戶:
navigator.notification.alert("Cordova is ready");
注意大部分Cordova API遷移到了插件中。要使用Cordova alert方法,必須安裝對話框架插件。使用以前提到的安裝插件命令:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git
許多Cordova API都由Navigator對象實例化。但不老是這樣,調用API以前要查看API文檔確認。
API可用後,用下面的例子說明API的使用,一樣建立一個HelloWorld3.html:
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html" charset="utf-8"> <meta name="viewport" content="user-scale=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width;"> <script src="cordova.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> function onBodyLoad(){ document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { br = "<br />"; var element = document.getElementById("appInfo"); element.innerHTML = 'Cordova Version: ' + device.cordova + br + 'Platform: ' + device.platform + br + 'Model: ' + device.model + br + 'OS Version: ' + device.version; } </script> </head> <body onload="onBodyLoad()"> <h1>HelloWorld3</h1> <p>This is a cordova application that makes calls to Cordova APIs.</p> <p id="appInfo">Waiting for Cordova Initialization to complete</p> </body> </html>
程序截圖以下:
ID爲"appInfo"的應用內容顯示了設備信息和Cordova版本。設備信息可經過API獲取(http://cordova.apache.org/docs/en/3.0.0/cordova_device_device.md.html#Device),示例中使用了API方法的子集。爲了調用API須要安裝插件:
cordova plugin add https://git-wip-us.apache.org.org/repos/asf/cordova-plugin-device.git
Cordova框架提供了訪問設備和應用的功能,但應用界面主題仍是要由開發者使用HTML、CSS和JavaScript本身定義。開發者但願web應用的界面和感受更像原生應用,併產生了許多開源和商業JavaScript移動框架簡化這種工做,如jQuery Mobile、Dojo Mobile和Sencha Touch。
爲簡化建立美觀的Cordova應用工做,Adobe的開發者開發了一個小型、快速的叫Topcoat的CSS庫(http://topcoat.io),它能夠用來開發簡單、乾淨的UI。Topcoat封裝了一些經常使用的帶有圖像和按鈕的web應用UI元素。它並非像Sencha Touch或jQuery Mobile同樣徹底是HTML5框架,但對於建立乾淨、簡單、快速的web應用UI頗有用。
上述框架在Cordova應用開發中常常用到,所以在這裏強調一下是必要的。下面舉例說明使用jQuery Mobile提高UI效果。jQuery和JQuery Mobile一塊兒使用提供一些有用的UI元素併爲web移動應用定製外觀。
用一樣的方法建立名爲HelloWorld4.html的頁面:
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-type" content="text/html;charset=utf-8"> <meta name="viewport" content="user-scale=no,initial-scale=1,maxmium-scale=1,minimum-scale=1,width=device-width;"/> <link rel="stylesheet" href="css/jquery.mobile-1.3.1.css" /> <script type="text/javascript" charset="utf-8" src="js/jquery-2.0.2.js"></script> <script src="js/jquery.mobile-1.3.1.js" type="text/javascript" charset="utf-8"></script> <script src="cordova.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> function onBodyLoad(){ document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { br = "<br/>"; var element = document.getElementById("appInfo"); element.innerHTML = 'Cordova Version: ' + device.cordova + br + 'Platform: ' + device.platform + br + 'Model: ' + device.model + br + 'OS version: ' + device.version; } </script> </head> <body onload="onBodyLoad()"> <div data-role="page"> <div data-role="header" data-position="fixed"> <h1>Hello World 4</h1> </div> <div data-role="content"> <p>This is a Cordova application that makes calls to the Cordova APIs and uses the jQuery Mobile framework.</p> <p id="appInfo">Waiting for Cordova Initialization to complete.</p> </div> <div data-role="footer" data-position="fixed"> <h1>Cordova Programming</h1> </div> </div> </body> </html>
程序截圖以下圖:
若是應用在不一樣程序上部署,它們看起來的效果都是同樣的。在複雜點的應用中,如向更深層導航,jQM框架會自動向應用添加移動應用平臺功能,如iOS的後退鍵和Android的退出鍵和菜單。
注意到頁面的頭部加入了一些資源:jQM提供的CSS文件、jQuery和jQuery Mobile的js庫文件。在生產環境中要替換爲相應的壓縮版本。
頁面body部分在一些div標籤中添加由jQM使用的data-role屬性,用來把頁面指定部分格式化爲它們指定的角色的樣式。像data-role爲header的部分被格式化爲漸變背景色並使用data-position="fixed"屬性固定在頁面頂端。一樣,data-role爲footer的部分爲漸變背景色並被固定在頁面底部。data-role=content的部分位於header和footer之間,能夠滾動瀏覽。例子只是簡單的涉及到jQM的一些內容,更多內容請參考jQM的在線文檔或相關書藉。
由CLI建立項目時生成的項目的web內容位於項目根目錄的www文件夾中。不一樣的文件分開放置,像CSS文件放在css文件夾中,JavaScript文件在js文件夾中。index.html頁面跟前面示例相似,只是把cordova.js放在文件後面導入,這麼作的目的是爲了在加載js文件以前先加載HTML內容並在屏幕上顯示內容。頁面內容以下:
!<DOCTYPE html> <html> <head> <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *"> <meta name="format-detection" content="telephone-no"> <meta name="msapplication-tap-highlight" content="no"> <meta name="viewport" content="user-scalable=no, initial-scale=1, maxmium-scale=1, minimum-scale=1, width=device-width"> <link rel="stylesheet" type="text/css" href="css/index.css"> <title>>Hello World</title> </head> <body> <div class="app"> <h1>Apache Cordova</h1> <div id="deviceready" class="blink"> <p class="event listening">Connecting to Device</p> <p class="event received">Device is ready</p> </div> </div> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> </body> </html>
應用簡單顯示了Cordova的Logo和一些閃動的文本。操做頁面元素的js代碼位於index.js中,由文件底部的app.initialize()函數調用。
var app = { initialize: function() { this.bindEvents(); }, bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false); }, onDeviceReady: function() { app.receivedEvent('deviceready'); }, receivedEvent: function(id) { var parentElement = document.getElementById(id); var listeningElement = parentElement.queryElement('.listening'); var receivedElement = parentElement('received'); listeningElement.setAttribute('style', 'display:none'); receivedElement.setAttribute('style', 'display:none'); } }; app.initialize();
代碼首先註冊了devcieready的監聽器。deviceReady函數執行時向控制檯寫了一些信息,而後更新頁面內容說明Cordova容器已經準備好了。這個示例的js寫法明顯說明Cordova應用的構建過程,相比以前的例子,結構上更像現代的HTML5應用。
好了,如今咱們已經對Cordova開發有了一個初步的印象,下一篇咱們仔細研究一下Cordova開發過程。