<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Firefox OS - русскоязычный форум по Firefox ОС — Урок по написанию приложений в Firefox OS]]></title>
		<link>https://firefoxforum.ru/viewtopic.php?id=20</link>
		<atom:link href="https://firefoxforum.ru/extern.php?action=feed&amp;tid=20&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in Урок по написанию приложений в Firefox OS.]]></description>
		<lastBuildDate>Sun, 12 May 2013 14:14:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Урок по написанию приложений в Firefox OS]]></title>
			<link>https://firefoxforum.ru/viewtopic.php?pid=70#p70</link>
			<description><![CDATA[<p>Спасибо за полезную статью!</p>]]></description>
			<author><![CDATA[null@example.com (r1st)]]></author>
			<pubDate>Sun, 12 May 2013 14:14:22 +0000</pubDate>
			<guid>https://firefoxforum.ru/viewtopic.php?pid=70#p70</guid>
		</item>
		<item>
			<title><![CDATA[Урок по написанию приложений в Firefox OS]]></title>
			<link>https://firefoxforum.ru/viewtopic.php?pid=44#p44</link>
			<description><![CDATA[<p>В популярном блоге Хабрахабр юзер RAZVOR написал статью о том, как писать приложения в<br />Firefox OS<br />, я воспроизведу её здесь.<br />Как многие знают недавно mozilla выпустила свою firefox os, уже появилось несколько смартфонов на этой платформе. Никаких статей, и реальных примеров по написанию приложений я не нашёл. Поэтом покопавшись на MDN я решил восполнить этот недостаток.<br />Чего-же такого хорошего в firefox os?<br />Идея этой мобильной системы достаточно инновационная, ведь firefox os это- «система-браузер», те приложения для ней пишутся на html/css. Главный плюс этого в том, что те кто писал веб-приложения смогут написать приложения для неё без изучения дополнительных языков, фрэймворков итд. Также разработчики смогут легко портировать на данную os уже имеющиеся веб-разработки.<br />С чего начать?<br />Сначала предлагаю поставить эмулятор firefox os. Для этого прекрасно подойдёт плагин для firefox под названием firefox os simulator. Скачать его можно здесь.<br />Начнем!<br />Манифест<br />После того как мы скачали и установили эмулятор, предлагаю создать папку с названием нашего приложения, где оно собственно и будет располагаться. Наше учебное приложение будет называться «Count sistems». Оно будет переводить числа в разные системы счисления и также производить с ними арифметические действия. Я уже писал такое приложение на c++, теперь посмотрим как оно будет выглядеть на html/js.<br />После того как мы создали папку давайте напишем манифест для нашего приложения. Манифест-это такой файл в формате json, который будет говорить os как называется приложение, где находится его иконка и многое другое.<br />Код такого файла будет выглядеть так:<br />{ &quot;name&quot;:&quot;count systems&quot;,//название &quot;launch_path&quot;: &quot;/index.html&quot;,//путь до главного файла приложения &quot;developer&quot;: { &quot;name&quot;:&quot;RAZVOR&quot;,//разработчик &quot;url&quot;:&quot;&quot;//сайт разработчика }, &quot;description&quot;:&quot;count systems app&quot;,//описание &quot;icons&quot;:{ &quot;128&quot;:&quot;/icon.png&quot;//иконка } }<br />сохраним этот файл под именем manifest.webapp в созданную папку.<br />Разметка<br />Так как мы пишем почти веб-приложение создаём файл index.html. Со следующим кодом:<br />&lt;html&gt; &lt;head&gt;&lt;script src=&quot;https://myapps.mozillalabs.com/jsapi/include.js&quot;&gt;&lt;/script&gt;&lt;/head&gt; &lt;body&gt;&lt;p&gt;hello world&lt;/p&gt;&lt;/body&gt; &lt;script&gt;&lt;/script&gt; &lt;/html&gt;<br />Как видим ничего особенного в этом нету.<br />Запуск<br />Чтобы запустить приложение через эмулятор просто откройте в firefox инструменты-&gt;веб-разработка-&gt;firefox os simulator<br />откроется вкладка эмулятора. После этого нажимаем add Directory и выбираем наш manifest.webapp.<br />В принципе в firefox os запускать приложения можно без установки, но тока в marketplace, эмулятор же сам устанавливает приложения.<br />Чтобы его запустить жмём run а чтобы обновить update.<br />Давайте запустим наше учебное приложение!<br />Это вы увидите, если всё сделали правильно.<br />Установка приложения из самого приложения<br />Как я и говорил ранее в os можно запускать приложения без установки, чтобы их установить есть специальная функция в api, применим её, теперь код выглядит так:<br />&lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;UFT-8&quot;&gt; &lt;script src=&quot;https://myapps.mozillalabs.com/jsapi/include.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;jquery.js&quot;&gt;&lt;/script&gt; &lt;link href=&quot;app.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt; &lt;/head&gt; &lt;body&gt;&lt;p&gt;hello world&lt;/p&gt;&lt;/body&gt; &lt;script&gt; var gManifestName = &quot;manifest.webapp&quot;;//путь к манифесту app=function(){ this.init=function(){ //работа приложения } this.init(); }; $(document).ready(function(){ var request = navigator.mozApps.getSelf(); //Вызываем класс для получения информации о приложении request.onsuccess=function(){// при успешном вызове if(request.result){//если мы получили результат, значит приложение установленно alert(&#039;Приложение установлено&#039;); a=new app(); }else{// если нет то создаем кнопку $(&#039;&lt;div&gt;&#039;).appendTo(&#039;body&#039;).attr(&#039;id&#039;,&#039;inst_b&#039;).text(&#039;Установить!&#039;).css({width:200,textAlign:&#039;center&#039;,padding:5,background:&#039;#222&#039;,color:&#039;#ccc&#039;,borderRadius:&#039;3px&#039;}).click(function(){ var inst=navigator.mozApps.install(gManifestName);//при клике на кнопку устанавливаем приложение inst.onsuccess=function(){alert(&#039;Установка завершена&#039;);$(&#039;#inst_b&#039;).remove();a=new app();};//установка выполнена успешно inst.onerror=function(){alert(&#039;Установка не удалась:\n&#039;+this.error.name)}// ошибка при установке }); } }; request.onerror=function(){alert(&#039;Ошибка:\n&#039;+this.error.message)}//при ошибке }); &lt;/script&gt; &lt;/html&gt;<br />Вот мы и позаботились об установке, также мы добавили css и jqury поэтому не забудьте поместить их в папку с приложением под соответствующими именами.<br />После Hello world<br />Теперь, вы должны уже понимать кое какие особенности. Мы сказали привет миру, теперь можем заняться написанием реального приложения.<br />Модернизируем наш код.<br />html:<br />&lt;html lang=&quot;ru&quot;&gt; &lt;head&gt; &lt;title&gt;Count systems&lt;/title&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;/app.css&quot;&gt; &lt;script src=&quot;jquery.js&quot;&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;h1 class=&quot;center&quot;&gt;Count systems&lt;/h1&gt; &lt;div class=&quot;feilds&quot;&gt; &lt;p&gt;Введите число&lt;/p&gt;&lt;input type=&quot;text&quot;/&gt; &lt;p&gt;Введите систему счисления&lt;/p&gt;&lt;input type=&quot;text&quot;/&gt; &lt;p&gt;Введите требуема система счисления&lt;/p&gt;&lt;input type=&quot;text&quot;/&gt; &lt;div class=&quot;error&quot;&gt;&lt;/div&gt; &lt;div class=&quot;result&quot;&gt;&lt;/div&gt; &lt;button class=&quot;submit&quot;&gt;Перевод!&lt;/button&gt; &lt;/div&gt; &lt;/body&gt; &lt;script&gt; var gManifestName = &quot;manifest.webapp&quot;; app=function(){ this.alp=&quot;abcdefghijklmnopqrstuvwxyz&quot;; //this.e=&#039;1&#039;; this.p={ ten_to:function(c,d){ var i=0,r=&#039;&#039;; do{ v=c%d; c=(c-(c%d))/d; if(v&gt;9){ r+=this.alp[v-10]; }else{ r+=v; } }while(c!=0); var r2=&#039;&#039;; for(i=(r.length-1);i&gt;-1;i--){ r2+=r[i]; } return r2; }, to_ten:function(c,d){ c=c.toString(); var v,r=&#039;&#039;; for(var i=0;i&lt;c.length;i++){ v=c[i]; if(v.match(/[0-9]/)!=v){ for(i in this.alp){ if(this.alp==v){ v=i+11; return false; } } } r+=v*d; } return r; } }; this.error=function(t){ $(&#039;.error&#039;).text(t); setTimeout(function d(){$(&#039;.error&#039;).text(&#039;&#039;).hide()},1000); }; this.wr_res=function(t){ $(&#039;.result&#039;).show().text(t); } this.init=function(){ $(&#039;body&#039;).load(&#039;/a.html&#039;); $(&#039;.submit&#039;).click(function sub(){ $(&#039;.submit&#039;).hide(); a2=new app(); var fi=$(&#039;.feilds input&#039;); fi.each(function(){ if($(this).val().length&lt;1){ a2.error(&#039;Не все данные введены!&#039;); return false; } }); var data={ c:fi[0].value, sis:fi[1].value, to_sis:fi[2].value }; with(data){ if(sis==10){ a2.wr_res(a2.p.ten_to(c,to_sis)); }else{ if(to_sis==10){ a2.wr_res(a2.p.to_ten(c,sis)); }else{ a2.wr_res(a2.p.ten_to(a2.p.to_ten(c,sis),to_sis)); } } } fi.change(function(){ $(&#039;.result&#039;).hide().text(&#039;&#039;); $(&#039;.submit&#039;).show(); }); }); } this.init(); }; $(document).ready(function(){ var request = navigator.mozApps.getSelf(); request.onsuccess=function(){ if(request.result){ a=new app(); }else{ $(&#039;&lt;div&gt;&#039;).appendTo(&#039;body&#039;).text(&#039;Установить!&#039;).css({width:200,textAlign:&#039;center&#039;,padding:5,background:&#039;#222&#039;,color:&#039;#ccc&#039;,borderRadius:&#039;3px&#039;}).click(function(){ var inst=navigator.mozApps.install(gManifestName); inst.onsuccess=function(){alert(&#039;Установка завершена&#039;);a=new app();}; inst.onerror=function(){alert(&#039;Установка не удалась:\n&#039;+this.error.name)} }); } }; request.onerror=function(){alert(&#039;Ошибка:\n&#039;+this.error.message)} }); &lt;/script&gt; &lt;/html&gt;<br />css:<br />.center{ width:250; margin:1 auto; } .feilds{ width:250px; margin:10 auto; border-radius:5px; box-shadow:inset 0 0 10px #ddd; padding:10px; } .submit{ width:100; padding:7; background-color:#222; color:#ccc; background-image:none !important; margin-top:15px; } .error{ width:100px; margin:0 auto; color:red; } .result{ width:100px; overflow:auto; margin:5 auto; border:1px solid #aaa; border-radius:4px; padding:6px; display:none; }<br />Думаю как это работает вы сможете разобраться сами, тк ничего особенного и нового в этом нет.<br />Некоторые возможности api<br />В firefox os помимо встроенных html5 api, есть и свое. Из него вы использовали класс navigator. Теперь я опишу некоторые возможности этого класса.<br />Онлайн или оффлайн<br />Как же нам проверить подключен ли к сети девайс? Для этого нам на помощь приходит метод navigator.onLine. Если возвращает true-сеть есть.false-нет. Всё просто.<br />Ориентация устройства<br />Можно подключать разные css в зависимости от ориентации.Например так:<br />&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:portrait)&quot; href=&quot;portrait.css&quot;&gt; &lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:landscape)&quot; href=&quot;landscape.css&quot;&gt;<br />Также можно получить данные с акселлерометра через js<br />window.addEventListener(&quot;deviceorientation&quot;, handleOrientation, true); function handleOrientation(orientData) { var absolute = orientData.absolute; var alpha = orientData.alpha; var beta = orientData.beta; var gamma = orientData.gamma; }<br />Вибрация<br />Для вибрации можно использовать следующую функцию:<br />navigator.vibrate(1000);//Вибрация 1000 миллисекунд<br />Размещаем приложение в Marketplace<br />Когда мы написали наше тестовое приложение, самое время представить его народу, те разместить в marketplace. Эта операция очень проста, но нужно знать некоторые нюансы. Первым делом надо выбрать, будете вы размещать исходники у себя или на маркете. Если первое, то нужно специальным образом настроить сервер или github, подробнее здесь. Я же выбрал второй способ, для этого нам надо просто запоковать приложение в zip и выбрать нажав Submit an App-&gt;packeged-&gt;select a file. Если с манифестом всё нормально вы перейдете к шагу 2. На последующих этапах вам нужно составить описание и загрузить скрины( ВНИМАНИЕ НЕ МЕНЬШЕ ЧЕМ 500x600px ). Если всё прошло гладко, то поздравляю, У вас за плечами опыт написания и размещения целого приложения!<br />(Статья была взята с ресурса Хабрахабр, оригинал статьи здесь.)</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 15 Mar 2013 00:55:15 +0000</pubDate>
			<guid>https://firefoxforum.ru/viewtopic.php?pid=44#p44</guid>
		</item>
	</channel>
</rss>
