{"id":2212,"date":"2012-09-10T21:49:06","date_gmt":"2012-09-10T20:49:06","guid":{"rendered":"http:\/\/flaven.fr\/?p=2212"},"modified":"2013-09-24T05:29:02","modified_gmt":"2013-09-24T03:29:02","slug":"phonegap-html5-javascript-jquery-mobile-introduction-au-framework-phonegap","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2012\/09\/phonegap-html5-javascript-jquery-mobile-introduction-au-framework-phonegap\/","title":{"rendered":"PhoneGap, HTML5, JavaScript, jQuery Mobile &#8211; Introduction au framework PhoneGap"},"content":{"rendered":"\n<p><!--  PhoneGap, HTML5, JavaScript, jQuery Mobile - Introduction au framework PhoneGap --><br \/>\n<!--  HTML5, iPad, iPhone, javascript, Adobe, Flash, mobile, Android, Blackberry, Windows Phone, Palm WebOS, Bada, Symbian, JSON, jQuery, MAMP, PHP, simulation, application, jquery, mobile --><br \/>\nPhoneGap est un framework javascript qui permet de faire des applications Iphone, Ipad avec l&#8217;aide de HTML5. Ce framework pr\u00e9sentait un tel int\u00e9r\u00eat qu&#8217;il est devenu la propri\u00e9t\u00e9 de Adobe, qui renforce sa strat\u00e9gie de p\u00e9n\u00e9tration au sein du march\u00e9 des applications HTML5 pour tablettes, smartphones et autres nouvelles plate-formes ou Flash ne semble pas vraiment bienvenue. Le concept est franchement int\u00e9ressant puisque \u00e0 l&#8217;aide de CSS3, Javascript et HTML5, vous allez pouvoir visualiser et \u00e9ventuellement compiler vos exp\u00e9riences HTML5, CSS3, Javascript afin d&#8217;en faire des applications. <!--more-->PhoneGap, comme son nom l&#8217;indique, PhoneGap r\u00e9duit \u00e0 la force de ces petits bras muscl\u00e9s l&#8217;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des plates-formes, ne cible pas seulement pour les produits Apple (iOS) mais aussi pour tous les autres OS ou plates-formes existantes : Android, Blackberry, Windows Phone, Palm WebOS, Bada et Symbian.<br \/>\nBref, la rachat de PhoneGap, c&#8217;est la r\u00e9ponse d&#8217;Adobe qui a fait sienne la pr\u00e9diction d&#8217;Andr\u00e9 Malraux, un peu  modifi\u00e9 qui annonce que &#8220;Le XXI\u00e8me si\u00e8cle sera mobile ou ne sera pas&#8221; d&#8217;o\u00f9 notre int\u00e9r\u00eat pour ce framework.<\/p>\n<p><i>L&#8217;ensemble des captures et des tests que nous avons men\u00e9 ont \u00e9t\u00e9 faits avec la version de PhoneGap <code>phonegap-phonegap-1.9.0-0-g41e05fc.zip<\/code>, qui donne acc\u00e8s \u00e0 un fichier d&#8217;installation &#8220;Apple Disk Image&#8221; nomm\u00e9 Cordova-1.9.0.dmg. Il ne vous restera plus qu&#8217;\u00e0 lancer l&#8217;installation.<\/i><\/p>\n<h4>Installer PhoneGap<\/h4>\n<p>La premi\u00e8re chose \u00e0 faire et de t\u00e9l\u00e9charger XCODE sur le site d&#8217;Apple. Nous avons dans notre cas, t\u00e9l\u00e9charger une version ant\u00e9rieure (<code>xcode_3.2.6_and_ios_sdk_4.3.dmg<\/code>) \u00e0 celle actuelle, la version 4. Le fichier est lourd, plus de 4 Go et vous serez dans l&#8217;obligation de vous inscrire au site d&#8217;Apple pour acc\u00e9der au lien de t\u00e9l\u00e9chargement, soyez donc patient.<\/p>\n<p>Une fois, les deux installations faites, vous disposez de l&#8217;environnement n\u00e9cessaire pour commencer \u00e0 tester PhoneGap.<\/p>\n<h2>Cr\u00e9er son premier projet<\/h2>\n<p>Nous allons le nommer <code>Projet Social Hecube<\/code>. Pour cela il vous suffit de vous rendre dans <code>File &gt; New Project<\/code> et de donner un nom \u00e0 votre futur application.<\/p>\n<p><b>S\u00e9lectionner dans Xcode un projet &#8220;Cordova&#8221;<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_1.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>Choisir le nom du projet, dans notre exemple <code>Projet Social Hecube<\/code><\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_2.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>Vous obtenez une arborescence de projet<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_3.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>Vous devez s\u00e9lectionner un simulateur, iPhone ou Ipad<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_4.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>En choisissant le simulateur iPhone, vous obtenez la cr\u00e9ation du r\u00e9pertoire <code>www<\/code> qui vous affiche la page <code>index.html<\/code> par d\u00e9faut<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_5.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>En choisissant le simulateur iPhone, vous obtenez la cr\u00e9ation du r\u00e9pertoire <code>www<\/code> qui vous affiche la page <code>index.html<\/code> par d\u00e9faut<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_6.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<h4>Les erreurs les plus fr\u00e9quentes<\/h4>\n<p>Il existe deux erreurs assez fr\u00e9quentes qui interdisent souvent le lancement de l&#8217;\u00e9mulateur. Elles sont les suivantes :<\/p>\n<ol>\n<li><b>Erreur :<\/b> le message d&#8217;erreur est le suivant <code>File XXX.app depends on itself.  This target might include its own product.<\/code><\/li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_error_1_1.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<li><b>Pour y rem\u00e9dier<\/b>\n<ul>\n<li>Ouvrez la rubrique du groupe &#8220;Products&#8221; dans les volets Groupes &amp; Fichiers, cliquez sur le fichier <code>.app<\/code><\/li>\n<li>Faites un clic droit -&gt; &#8220;Get Info&#8221;<\/li>\n<li>Dans le &#8220;Targets&#8221;, assurez-vous que le fichier <code>.app<\/code> n&#8217;est pas coch\u00e9e<\/li>\n<\/ul>\n<p><b>D\u00e9cocher le fichier <code>.app<\/code><\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_error_1_2.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>D\u00e9cocher le fichier <code>.app<\/code><\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_error_1_3.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<\/li>\n<li><b>Erreur : Bien choisir pour votre projet le dernier iOS<\/b> <\/li>\n<p><b>D\u00e9tail 1<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_error_2_1.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>D\u00e9tail 2<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_error_2_2.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><br \/>\n<!-- end errors -->\n<\/ol>\n<h2>Cr\u00e9er un projet plus avanc\u00e9<\/h2>\n<p>On va tenter d&#8217;injecter des donn\u00e9es au format <code>JSON<\/code> issu directement d&#8217;un serveur web. Pour se faire, on va se servir d&#8217;un serveur en local qui tourne sur <code>MAMP<\/code> ne creant une base de donn\u00e9es, en g\u00e9n\u00e9rant un flux <code>json<\/code> puis en la manipulant \u00e0 l&#8217;aide de de <code>jQuery Mobile<\/code><\/p>\n<p><b>Pour compiler, il suffit de cliquer sur le bouton &#8220;Click abd Run&#8221;<\/code><\/b><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_1.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_2.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>Pour permettre l&#8217;appel \u00e0 des donn\u00e9es externes dans <code>PhoneGap<\/code>. Il suffit d&#8217;ajouter une entr\u00e9e g\u00e9n\u00e9rique <code>*<\/code> (wildcard) \u00e0 la liste blanche h\u00f4tes externe dans <code>Cordova.plist \/ ExternalHosts<\/code>. Cela autoriserq tous les serveurs \u00e0 communiquer avec votre \u00e9mulateur.<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_3.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>D\u00e9tail du changement de <code>Cordova.plist \/ ExternalHosts<\/code><\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_3_a.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b><\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_4.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_simulator_5.jpg\" alt=\"honeGap, HTML5, JavaScript - Introudction au framework PhoneGap\" width=\"500\" height=\"265\" \/><\/p>\n<p><b>Le code source du fichier <code>getemployees.php<\/code> appel\u00e9 en local de puis <code>http:\/\/127.0.0.1\/employeedirectory\/getemployees.php<\/code><\/b><\/p>\n<pre lang=\"javascript\" escaped=\"true\">\r\n\t\r\n\t&lt;?php\r\n\theader('Content-type: application\/json');\r\n\r\n\t$server = \"localhost\";\r\n\t$username = \"root\";\r\n\t$password = \"root\";\r\n\t$database = \"directory\";\r\n\r\n\t$con = mysql_connect($server, $username, $password) or die (\"Could not connect: \" . mysql_error());\r\n\tmysql_select_db($database, $con);\r\n\t$sql = \"SELECT id, firstName AS firstname, lastName AS lastname, managerId, title AS title, department AS department FROM employee\";\t\t\r\n\t$result = mysql_query($sql) or die (\"Query error: \" . mysql_error());\r\n\r\n\t$records = array();\r\n\r\n\twhile($row = mysql_fetch_assoc($result)) {\r\n\t\t$records[] = $row;\r\n\t}\r\n\r\n\tmysql_close($con);\r\n\r\n\techo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';\r\n\t?&gt;\r\n\t\r\n<\/pre>\n<p><b>Le fichier <code>index.html<\/code> \u00e0 placer dans le r\u00e9pertoire <code>www<\/code> de votre projet <code>PhoneGap<\/code> <\/b><\/p>\n<pre lang=\"html\" escaped=\"true\">\r\n\t&lt;!DOCTYPE HTML&gt;\r\n\t&lt;html lang=&quot;en&quot;&gt;\r\n\t&lt;head&gt;\r\n\t\t&lt;title&gt;Employee Directory&lt;\/title&gt;\r\n\t\t&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;\/&gt;\r\n\t\t&lt;link rel=&quot;stylesheet&quot; href=&quot;css\/jquery.mobile-1.0rc1.min.css&quot; \/&gt;\r\n\t\t&lt;link rel=&quot;stylesheet&quot; href=&quot;css\/styles.css&quot; \/&gt;\r\n\t\t&lt;meta charset=&quot;UTF-8&quot;&gt;\r\n\t\t&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;&quot; \/&gt;\r\n\r\n\t\t&lt;script type=&quot;text\/javascript&quot; charset=&quot;utf-8&quot; src=&quot;cordova-1.9.0.js&quot;&gt;&lt;\/script&gt;\r\n\t\t&lt;script src=&quot;js\/jquery-1.7.2.min.js&quot;&gt;&lt;\/script&gt;\r\n\t\t&lt;script src=&quot;js\/load-json.js&quot;&gt;&lt;\/script&gt;\r\n\r\n\r\n\t&lt;\/head&gt;\r\n\t&lt;body&gt;\r\n\t\t&lt;div id=&quot;employeeListPage&quot; data-role=&quot;page&quot; &gt;\r\n\r\n\t\t\t&lt;div data-role=&quot;header&quot; data-position=&quot;fixed&quot;&gt;\r\n\t\t\t\t&lt;h1&gt;Employee Directory&lt;\/h1&gt;\r\n\t\t\t&lt;\/div&gt;\r\n\r\n\t\t\t&lt;div data-role=&quot;content&quot;&gt;\r\n\t\t         &lt;ul id=&quot;employeeList&quot; data-role=&quot;listview&quot; data-filter=&quot;true&quot;&gt;&lt;\/ul&gt;\r\n\t\t    &lt;\/div&gt;\t\t\r\n\r\n\t\t&lt;\/div&gt;\r\n\r\n\t\t&lt;\/body&gt;\r\n\t&lt;\/html&gt;\r\n\t\r\n<\/pre>\n<p><b>Le code source du fichier <code>load-json.js<\/code><\/b><\/p>\n<pre lang=\"javascript\" escaped=\"true\">\r\n\t\r\n\t$(document).ready(function(){\r\n\t\t$(document).bind('deviceready', function(){\r\n\t\t\t\/\/Phonegap ready\r\n\t\t\tonDeviceReady();\r\n\t\t});\r\n\r\n\t\t\/\/ var output = $('#output');\r\n\t\tvar output = $('#employeeListPage');\r\n\r\n\r\n\t\t$.ajax({\r\n\t\t\t\/* URL vers le fichier JSON *\/\r\n\t\t\turl: 'http:\/\/127.0.0.1\/employeedirectory\/getemployees.php',\r\n\t\t\tdataType: 'jsonp',\r\n\t\t\tjsonp: 'jsoncallback',\r\n\t\t\ttimeout: 5000,\r\n\t\t\tsuccess: function(data, status){\r\n\r\n\t\t\t\t$.each(data, function(i,item){\r\n\t\t\t\tvar person = \r\n\t\t\t\t'<li>' +\r\n\t\t\t\t'<h4>' + item.firstname + ' ' + item.lastname + '<\/h4>' +\r\n\t\t\t\t'<p>' + item.title + '<\/p>' +\r\n\t\t\t\t'<p>' + item.department + '<\/p>' +\r\n\t\t\t\t'<\/li>';\r\n\r\n\t\t\t\t\toutput.append(person);\r\n\t\t\t\t});\r\n\r\n\t\t\t},\r\n\t\t\terror: function(){\r\n\t\t\t   output.text('There was an error loading the data.');\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\t\r\n<\/pre>\n<p><b>le code de la BDD <code>directory<\/code><\/b><\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\n\t--\r\n\t-- BDD: `directory`\r\n\t--\r\n\r\n\t-- --------------------------------------------------------\r\n\r\n\t--\r\n\t-- Structure de la table `employee`\r\n\t--\r\n\r\n\tCREATE TABLE `employee` (\r\n\t  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n\t  `firstName` varchar(30) NOT NULL,\r\n\t  `lastName` varchar(30) NOT NULL,\r\n\t  `managerId` int(11) NOT NULL,\r\n\t  `title` varchar(45) NOT NULL,\r\n\t  `department` varchar(45) NOT NULL,\r\n\t  `officePhone` varchar(45) NOT NULL,\r\n\t  `cellPhone` varchar(45) NOT NULL,\r\n\t  `email` varchar(45) NOT NULL,\r\n\t  `city` varchar(45) NOT NULL,\r\n\t  `picture` varchar(250) NOT NULL,\r\n\t  PRIMARY KEY (`id`)\r\n\t) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;\r\n\r\n\t--\r\n\t-- Contenu de la table `employee`\r\n\t--\r\n\r\n\tINSERT INTO `employee` VALUES(12, 'Steven', 'Wells', 4, 'Software Architect', 'Engineering', '617-000-0012', '781-000-0012', 'swells@fakemail.com', 'Boston, MA', 'steven_wells.jpg');\r\n\tINSERT INTO `employee` VALUES(11, 'Amy', 'Jones', 5, 'Sales Representative', 'Sales', '617-000-0011', '781-000-0011', 'ajones@fakemail.com', 'Boston, MA', 'amy_jones.jpg');\r\n\tINSERT INTO `employee` VALUES(10, 'Kathleen', 'Byrne', 5, 'Sales Representative', 'Sales', '617-000-0010', '781-000-0010', 'kbyrne@fakemail.com', 'Boston, MA', 'kathleen_byrne.jpg');\r\n\tINSERT INTO `employee` VALUES(9, 'Gary', 'Donovan', 2, 'Marketing', 'Marketing', '617-000-0009', '781-000-0009', 'gdonovan@fakemail.com', 'Boston, MA', 'gary_donovan.jpg');\r\n\tINSERT INTO `employee` VALUES(8, 'Lisa', 'Wong', 2, 'Marketing Manager', 'Marketing', '617-000-0008', '781-000-0008', 'lwong@fakemail.com', 'Boston, MA', 'lisa_wong.jpg');\r\n\tINSERT INTO `employee` VALUES(7, 'Paula', 'Gates', 4, 'Software Architect', 'Engineering', '617-000-0007', '781-000-0007', 'pgates@fakemail.com', 'Boston, MA', 'paula_gates.jpg');\r\n\tINSERT INTO `employee` VALUES(5, 'Ray', 'Moore', 1, 'VP of Sales', 'Sales', '617-000-0005', '781-000-0005', 'rmoore@fakemail.com', 'Boston, MA', 'ray_moore.jpg');\r\n\tINSERT INTO `employee` VALUES(6, 'Paul', 'Jones', 4, 'QA Manager', 'Engineering', '617-000-0006', '781-000-0006', 'pjones@fakemail.com', 'Boston, MA', 'paul_jones.jpg');\r\n\tINSERT INTO `employee` VALUES(3, 'Eugene', 'Lee', 1, 'CFO', 'Accounting', '617-000-0003', '781-000-0003', 'elee@fakemail.com', 'Boston, MA', 'eugene_lee.jpg');\r\n\tINSERT INTO `employee` VALUES(4, 'John', 'Williams', 1, 'VP of Engineering', 'Engineering', '617-000-0004', '781-000-0004', 'jwilliams@fakemail.com', 'Boston, MA', 'john_williams.jpg');\r\n\tINSERT INTO `employee` VALUES(2, 'Julie', 'Taylor', 1, 'VP of Marketing', 'Marketing', '617-000-0002', '781-000-0002', 'jtaylor@fakemail.com', 'Boston, MA', 'julie_taylor.jpg');\r\n\tINSERT INTO `employee` VALUES(1, 'James', 'King', 0, 'President and CEO', 'Corporate', '617-000-0001', '781-000-0001', 'jking@fakemail.com', 'Boston, MA', 'james_king.jpg');\r\n\t\r\n\t\r\n<\/pre>\n<h2>En savoir plus<\/h2>\n<ul>\n<li>PhoneGap and iOS quick setup video<br \/><a href=\"http:\/\/www.youtube.com\/watch?v=W5hzwxxUCqE\" target=\"_blank\">http:\/\/www.youtube.com\/watch?v=W5hzwxxUCqE<\/a><\/li>\n<li>Xcode &#8211; Apple Developer<br \/><a href=\"https:\/\/developer.apple.com\/xcode\/\" target=\"_blank\">https:\/\/developer.apple.com\/xcode\/<\/a><\/li>\n<li>Updated: loading external data into an iOS PhoneGap app using jQuery 1.5<br \/><a href=\"http:\/\/samcroft.co.uk\/2011\/updated-loading-data-in-phonegap-using-jquery-1-5\/\" target=\"_blank\">http:\/\/samcroft.co.uk\/2011\/updated-loading-data-in-phonegap-using-jquery-1-5\/<\/a><\/li>\n<li>How to elegantly handle errors in a PhoneGap \/ Cordova app by using device API native notifications<br \/><a href=\"http:\/\/samcroft.co.uk\/2012\/native-notifications-for-phonegap-cordova-apps\/\" target=\"_blank\">http:\/\/samcroft.co.uk\/2012\/native-notifications-for-phonegap-cordova-apps\/<\/a><\/li>\n<li>Sample Application using jQuery Mobile and PhoneGap<br \/><a href=\"http:\/\/coenraets.org\/blog\/2011\/10\/sample-application-with-jquery-mobile-and-phonegap\/\" target=\"_blank\">http:\/\/coenraets.org\/blog\/2011\/10\/sample-application-with-jquery-mobile-and-phonegap\/<\/a><\/li>\n<li>Getting started with PhoneGap<br \/><a href=\"http:\/\/www.netmagazine.com\/tutorials\/getting-started-phonegap\" target=\"_blank\">http:\/\/www.netmagazine.com\/tutorials\/getting-started-phonegap<\/a><\/li>\n<li>The PhoneGap Wiki<br \/><a href=\"https:\/\/github.com\/phonegap\/phonegap\/wiki\" target=\"_blank\">https:\/\/github.com\/phonegap\/phonegap\/wiki<\/a><\/li>\n<li>Adobe\u00ae PhoneGap\u2122 Build<br \/><a href=\"https:\/\/build.phonegap.com\/\" target=\"_blank\">https:\/\/build.phonegap.com\/<\/a><\/li>\n<li>Creating an Android &#8220;Hello World&#8221; Application with PhoneGap (PC)<br \/><a href=\"http:\/\/mobile.tutsplus.com\/tutorials\/phonegap\/creating-an-android-hello-world-application-with-phonegap\/\" target=\"_blank\">http:\/\/mobile.tutsplus.com\/tutorials\/phonegap\/creating-an-android-hello-world-application-with-phonegap\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>PhoneGap est un framework javascript qui permet de faire des applications Iphone, Ipad avec l&#8217;aide de HTML5. Ce framework pr\u00e9sentait un tel int\u00e9r\u00eat qu&#8217;il est&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2012\/09\/phonegap-html5-javascript-jquery-mobile-introduction-au-framework-phonegap\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">PhoneGap, HTML5, JavaScript, jQuery Mobile &#8211; Introduction au framework PhoneGap<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":9393,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"PhoneGap combine HTML5, JavaScript, et jQuery Mobile pour cr\u00e9er des applications iPhone et iPad. Adobe renforce sa strat\u00e9gie avec ce framework.","bf_ai_og_title":"Introduction PhoneGap","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3442,3444,3447,3448,3449,3450,3451],"tags":[299,2238,163,460,258,256,2185,426,249,226,2190,192,416,31,461,20,462,463,464],"class_list":["post-2212","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-devices","category-programming-databases","category-technology-trends","category-tools-productivity","category-tutorials-how-to","category-ux-product-design","category-web-design-front-end","tag-adobe","tag-android","tag-application","tag-bada","tag-blackberry","tag-flash","tag-html5","tag-ipad","tag-iphone","tag-javascript","tag-jquery","tag-json","tag-mamp","tag-mobile","tag-palm-webos","tag-php","tag-simulation","tag-symbian","tag-windows-phone"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-zG","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2012\/09\/introduction_to_phonegap_b_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/2212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=2212"}],"version-history":[{"count":1,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/2212\/revisions"}],"predecessor-version":[{"id":9394,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/2212\/revisions\/9394"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/9393"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=2212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=2212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=2212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}