SlideShare a Scribd company logo
HTML for the Mobile Web 
All Things Open 
Firefox OS 
2014-10-22 
Frédéric Harper 
Sr. Technical Evangelist @ Mozilla 
@fharper | outofcomfortzone.net 
Creative Commons: https://flic.kr/p/5HzQsy
Creative Commons: http://j.mp/1hCZYIe
Creative Commons: http://j.mp/1ljZuJC
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
38 billion devices 
connected in 2020 
ABI Research - 2013-05-09 - http://j.mp/38billion
Creative Commons: http://j.mp/1gP4X4K
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
What you deserve
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
Built with the Web 
Using HTML5, CSS3 and JavaScript 
with a number of APIs 
to build apps.
It’s open source
Some facts 
• Available in more than 24 countries 
• Primarly aimed at emerging & low 
end markets
Some of the devices
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
A Firefox OS app? 
§ Creating a hosted or packaged app 
§ Using 
§ Vanilla HTML5 
§ Librairies… 
§ Regular API 
§ Privileged API 
§ Certified API
HTML5 + manifest (JSON) = Firefox OS app 
{ 
"version": “42", 
"name": ”My amazing app", 
"launch_path": "/index.html", 
"description": ”My super amazing app do super amazing things", 
"icons": { 
"16": "/images/logo16.png”,}, 
"developer": { 
"name": ”Frédéric Harper", 
"url": "http://outofcomfortzone.net", 
}, 
"default_locale": "en", 
"permissions": { 
"geolocation": { 
"description": ”Get the long/lat of the user" 
} 
} 
}
DEMO Firefox OS + App Manager 
+ Emberjs todomvc
Web APIs
Web APIs – Regular 
• Alarm API 
• Ambient light sensor 
• Archive API 
• Battery Status API 
• Geolocation API 
• IndexedDB 
• Network Information API 
• Notifications API 
• Open WebApps 
• Proximity sensor 
• Push API 
• Screen Orientation 
• Vibration API 
• Web Activities 
• WebFM API 
• WebPayment 
packaged 
hosted
Ambient Light Sensor
Ambient Light Sensor 
window.addEventListener("devicelight", function (event) { 
// The level of the ambient light in lux 
// The lux values for "dim" typically begin below 50, 
// and the values for "bright" begin above 10000 
console.log(event.value); 
});
DEMO Boilerplate – Ambient Light Sensor
Battery Status
Battery Status 
var battery = navigator.battery; 
if (battery) { 
var batteryLevel = Math.round(battery.level * 100) + "%", 
charging = (battery.charging)? “yes" : "no", 
chargingTime = parseInt(battery.chargingTime / 60, 10, 
dischargingTime = parseInt(battery.dischargingTime / 60, 10); 
battery.addEventListener("levelchange", setStatus, false); 
battery.addEventListener("chargingchange", setStatus, false); 
battery.addEventListener("chargingtimechange", setStatus, false); 
}
Web APIs – Privileged 
• Browser API 
• Contacts API 
• Device Storage API 
• systemXHR 
• TCP Socket API 
packaged
Browser
Browser 
<div> 
<span id='location-bar'></span> 
<button onclick='go_button_clicked()'>Go</button> 
</div> 
<div id='load-status'></div> 
<div id='security-status'></div> 
<img id='favicon'> 
<div id='title'></div> 
<iframe mozbrowser src=‘yoursite.com' id='browser'></iframe>
Browser 
addEventListener('mozbrowserloadstart', function(e) { 
//Do stuff 
}); 
/* 
Possible values: 
"mozbrowserloadstart“ "mozbrowserloadend" 
"mozbrowserlocationchange“ "mozbrowsertitlechange" 
"mozbrowsericonchange“ "mozbrowsersecuritychange" 
"mozbrowsercontextmenu“ "mozbrowsererror" 
"mozbrowserkeyevent“ "mozbrowsershowmodalprompt" 
"mozbrowseropenwindow“ "mozbrowserclose" 
*/
Web APIs – Certified 
• Camera API 
• Idle API 
• Mobile Connection API 
• Network Stats API 
• Permissions API 
• Power Management API 
• Settings API 
• Time/Clock API 
• Voicemail 
• WebBluetooth 
• WebSMS 
• WebTelephony 
• WiFi Information API 
OS/OEM
Web Activities
Web Activities 
• browse 
• configure 
• costcontrol 
• dial 
• Open 
• new 
• mail 
• websms/sms 
• webcontacts/contact 
• pick 
• record 
• save-bookmark 
• share 
• view 
• update 
packaged 
hosted
Pick 
var activity = new MozActivity({ 
name: "pick", 
//Provide the data required 
//by the filter of the activity 
data: { 
type: "image/jpeg" 
} 
});
Pick 
activity.onsuccess = function () { 
var img = document.createElement("img"); 
if (this.result.blob.type.indexOf("image") != -1) { 
img.src = window.URL.createObjectURL(this.result.blob); 
} 
}; 
activity.onerror = function () { 
//error 
};
Dial 
var call = new MozActivity({ 
name: "dial", 
data: { 
number: "+46777888999" 
} 
});
Web Activity Received Handler 
"activities": { 
"pick": { 
"filters": { 
"type": ["image/jpeg", "image/png"] 
}, 
"disposition": "inline", 
"returnValue": true, 
"href": "/index.html#pick" 
} 
}
Don’t forget to handle it! 
navigator.mozSetMessageHandler('activity', function(activityRequest) { 
var option = activityRequest.source; 
if (activityRequest.source.name === "pick") { 
// Do something to handle the activity 
if (picture) { 
activityRequest.postResult(picture); 
} 
else { 
activityRequest.postError("Unable to provide a picture"); 
} 
} 
});
Creative Commons: http://j.mp/1iZHGAW
Creative Commons: https://flic.kr/p/4mJnLg
How to start
Creative Commons: http://j.mp/1iquK8Q
Creative Commons: http://j.mp/Ilm7wx
Phonegap & Cordova 
& <3
Plugins 
implementation 
http://mozilla-cordova.github.io/
Simplicity…
Firefox Web Developer Tools
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
To infinity, and 
beyond… 
Creative Commons: http://j.mp/1gIdcPF
More Web APIs & features 
• Calendar API 
• FileHandle API Sync API 
• Keyboard/IME API WebRTC 
• HTTP-cache API 
• Peer to Peer API 
• Spellcheck API LogAPI 
• Resource lock API 
• UDP Datagram Socket API 
• WebNFC 
• WebUSB
Next time you’ll build a mobile app 
Think about HTML5 & Firefox OS
Resources 
Firefox OS Simulator 
http://j.mp/fxosSimulator 
Firefox OS App Manager 
http://j.mp/fxosAppManager 
Mozilla Developer Network 
https://developer.mozilla.org 
StackOverflow forum 
http://j.mp/fxosStackOverflow 
Firefox OS Boilerplate 
http://j.mp/fxosBoilerplate
Frédéric Harper 
fharper@mozilla.com 
@fharper 
http://hacks.mozilla.org 
http://outofcomfortzone.net

More Related Content

PDF
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
PDF
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
PDF
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
PPTX
Firefox OS, a startup opportunity - Mobile Startups Toronto & HTML Toronto me...
PDF
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
PDF
JavaScript APIs - The Web is the Platform
PDF
WebAPIs & WebRTC - Spotify/sthlm.js
PDF
The Open Web and what it means
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
Firefox OS, a startup opportunity - Mobile Startups Toronto & HTML Toronto me...
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
JavaScript APIs - The Web is the Platform
WebAPIs & WebRTC - Spotify/sthlm.js
The Open Web and what it means

What's hot (20)

PPTX
Web apps without internet
PDF
iPhone Appleless Apps
PDF
Getting Started With Google Wave Developlement
PDF
HTML5 & The Open Web - at Nackademin
PDF
Webapps without the web
PDF
What's new in iOS9
PPTX
Qualidade de vida: Com Zabbix e API
PDF
Viking academy backbone.js
PDF
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
PDF
Svelte JS introduction
PPTX
Cloud Endpoints _Polymer_ Material design by Martin Görner
PDF
Sane Async Patterns
PPTX
Vue.js + Django - configuración para desarrollo con webpack y HMR
PDF
Webgl para JavaScripters
PPTX
AngularJS with TypeScript and Windows Azure Mobile Services
PPTX
jQuery for web development
PDF
Bonnes pratiques de développement avec Node js
PDF
Campus party mexico the future of the open web
PDF
"Service Worker: Let Your Web App Feel Like a Native "
PDF
Go Mobile with Apache Cordova, Zagreb 2014
Web apps without internet
iPhone Appleless Apps
Getting Started With Google Wave Developlement
HTML5 & The Open Web - at Nackademin
Webapps without the web
What's new in iOS9
Qualidade de vida: Com Zabbix e API
Viking academy backbone.js
JavaScript APIs - The Web is the Platform - MDN Hack Day, Sao Paulo
Svelte JS introduction
Cloud Endpoints _Polymer_ Material design by Martin Görner
Sane Async Patterns
Vue.js + Django - configuración para desarrollo con webpack y HMR
Webgl para JavaScripters
AngularJS with TypeScript and Windows Azure Mobile Services
jQuery for web development
Bonnes pratiques de développement avec Node js
Campus party mexico the future of the open web
"Service Worker: Let Your Web App Feel Like a Native "
Go Mobile with Apache Cordova, Zagreb 2014
Ad

Similar to HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22 (20)

PDF
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
PDF
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
PDF
Firefox OS: HTML5 sur les stéroïdes - HTML5mtl - 2014-04-22
PDF
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
PDF
Web APIs & Apps - Mozilla
PDF
WebAPIs & Apps - Mozilla London
PDF
Øredev2013 - FirefoxOS - the platform HTML5 deserves
PDF
Firefox OS learnings & visions, WebAPIs - budapest.mobile
PDF
After max+phonegap
PDF
混搭移动开发:PhoneGap+JQurey+Dreamweaver
PDF
Taking Web Apps Offline
KEY
Intro To webOS
PDF
Firefox OS workshop, JSFoo, India
PDF
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - Geek Meet
PPTX
HTML5 on Mobile
PPTX
Phone Gap
KEY
Mobile HTML, CSS, and JavaScript
PDF
Firefox OS
PPTX
Firefox OS Web APIs, taking it to the next level
PDF
Firefox OS workshop, Colombia
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
Firefox OS: HTML5 sur les stéroïdes - HTML5mtl - 2014-04-22
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Web APIs & Apps - Mozilla
WebAPIs & Apps - Mozilla London
Øredev2013 - FirefoxOS - the platform HTML5 deserves
Firefox OS learnings & visions, WebAPIs - budapest.mobile
After max+phonegap
混搭移动开发:PhoneGap+JQurey+Dreamweaver
Taking Web Apps Offline
Intro To webOS
Firefox OS workshop, JSFoo, India
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - Geek Meet
HTML5 on Mobile
Phone Gap
Mobile HTML, CSS, and JavaScript
Firefox OS
Firefox OS Web APIs, taking it to the next level
Firefox OS workshop, Colombia
Ad

More from Frédéric Harper (20)

PDF
2017-11-09 - Fitbit Norcal Developers Meetup (fred)
PDF
2018 04-25 - HLTH hackathon
PDF
2018-06-07 - Singapore Fitbit Developers - Fitbit SDK & Web API Overview
PDF
2018 06-05 - Tokyo Fitbit Developers - Fitbit SDK & Web API Overview
PDF
Public speaking - FDP tech leads summit - 2018-04-30
PDF
2018 04-25 - HLTH hackathon
PDF
From employee to freelance developer in 10 steps - DevTeach - 2017-07-04
PDF
Infrastructure as a service to its maximum, a cultural change - S2LQ - 2016-0...
PDF
With great power comes great responsibility - Microsoft Canada Open Source co...
PDF
Frédéric harper i don’t like open source, and you shouldn't like it eithe...
PDF
Responsive Web Design, the secret sauce - MSDEVMTL - 2016-01-25
PDF
Responsive Web Design: the secret sauce - JavaScript Open Day Montreal - 2015...
PDF
Is your python application secure? - PyCon Canada - 2015-11-07
PDF
Personal branding for developers - West Island developers and entrepreneurs m...
PDF
Responsive Web Design, get the best out of your designs - JavaScript Open Day...
PDF
Differentiating yourself humber college - 2015-03-30
PDF
Differentiating yourself - Hack Western - 2015-03-28
PDF
Le personal branding, plus important que jamais - PHP Québec - 2015-03-05
PDF
Building a personal brand in the developer community - Codementor Office Hour...
PDF
Ma Carrière Techno - École secondaire St-Henri - 2014-11-27
2017-11-09 - Fitbit Norcal Developers Meetup (fred)
2018 04-25 - HLTH hackathon
2018-06-07 - Singapore Fitbit Developers - Fitbit SDK & Web API Overview
2018 06-05 - Tokyo Fitbit Developers - Fitbit SDK & Web API Overview
Public speaking - FDP tech leads summit - 2018-04-30
2018 04-25 - HLTH hackathon
From employee to freelance developer in 10 steps - DevTeach - 2017-07-04
Infrastructure as a service to its maximum, a cultural change - S2LQ - 2016-0...
With great power comes great responsibility - Microsoft Canada Open Source co...
Frédéric harper i don’t like open source, and you shouldn't like it eithe...
Responsive Web Design, the secret sauce - MSDEVMTL - 2016-01-25
Responsive Web Design: the secret sauce - JavaScript Open Day Montreal - 2015...
Is your python application secure? - PyCon Canada - 2015-11-07
Personal branding for developers - West Island developers and entrepreneurs m...
Responsive Web Design, get the best out of your designs - JavaScript Open Day...
Differentiating yourself humber college - 2015-03-30
Differentiating yourself - Hack Western - 2015-03-28
Le personal branding, plus important que jamais - PHP Québec - 2015-03-05
Building a personal brand in the developer community - Codementor Office Hour...
Ma Carrière Techno - École secondaire St-Henri - 2014-11-27

Recently uploaded (20)

PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
KodekX | Application Modernization Development
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Encapsulation theory and applications.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Cloud computing and distributed systems.
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
KodekX | Application Modernization Development
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Approach and Philosophy of On baking technology
Building Integrated photovoltaic BIPV_UPV.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Unlocking AI with Model Context Protocol (MCP)
Advanced methodologies resolving dimensionality complications for autism neur...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Encapsulation theory and applications.pdf
The AUB Centre for AI in Media Proposal.docx
Understanding_Digital_Forensics_Presentation.pptx
Cloud computing and distributed systems.
Digital-Transformation-Roadmap-for-Companies.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22

  • 1. HTML for the Mobile Web All Things Open Firefox OS 2014-10-22 Frédéric Harper Sr. Technical Evangelist @ Mozilla @fharper | outofcomfortzone.net Creative Commons: https://flic.kr/p/5HzQsy
  • 6. 38 billion devices connected in 2020 ABI Research - 2013-05-09 - http://j.mp/38billion
  • 11. Built with the Web Using HTML5, CSS3 and JavaScript with a number of APIs to build apps.
  • 13. Some facts • Available in more than 24 countries • Primarly aimed at emerging & low end markets
  • 14. Some of the devices
  • 20. A Firefox OS app? § Creating a hosted or packaged app § Using § Vanilla HTML5 § Librairies… § Regular API § Privileged API § Certified API
  • 21. HTML5 + manifest (JSON) = Firefox OS app { "version": “42", "name": ”My amazing app", "launch_path": "/index.html", "description": ”My super amazing app do super amazing things", "icons": { "16": "/images/logo16.png”,}, "developer": { "name": ”Frédéric Harper", "url": "http://outofcomfortzone.net", }, "default_locale": "en", "permissions": { "geolocation": { "description": ”Get the long/lat of the user" } } }
  • 22. DEMO Firefox OS + App Manager + Emberjs todomvc
  • 24. Web APIs – Regular • Alarm API • Ambient light sensor • Archive API • Battery Status API • Geolocation API • IndexedDB • Network Information API • Notifications API • Open WebApps • Proximity sensor • Push API • Screen Orientation • Vibration API • Web Activities • WebFM API • WebPayment packaged hosted
  • 26. Ambient Light Sensor window.addEventListener("devicelight", function (event) { // The level of the ambient light in lux // The lux values for "dim" typically begin below 50, // and the values for "bright" begin above 10000 console.log(event.value); });
  • 27. DEMO Boilerplate – Ambient Light Sensor
  • 29. Battery Status var battery = navigator.battery; if (battery) { var batteryLevel = Math.round(battery.level * 100) + "%", charging = (battery.charging)? “yes" : "no", chargingTime = parseInt(battery.chargingTime / 60, 10, dischargingTime = parseInt(battery.dischargingTime / 60, 10); battery.addEventListener("levelchange", setStatus, false); battery.addEventListener("chargingchange", setStatus, false); battery.addEventListener("chargingtimechange", setStatus, false); }
  • 30. Web APIs – Privileged • Browser API • Contacts API • Device Storage API • systemXHR • TCP Socket API packaged
  • 32. Browser <div> <span id='location-bar'></span> <button onclick='go_button_clicked()'>Go</button> </div> <div id='load-status'></div> <div id='security-status'></div> <img id='favicon'> <div id='title'></div> <iframe mozbrowser src=‘yoursite.com' id='browser'></iframe>
  • 33. Browser addEventListener('mozbrowserloadstart', function(e) { //Do stuff }); /* Possible values: "mozbrowserloadstart“ "mozbrowserloadend" "mozbrowserlocationchange“ "mozbrowsertitlechange" "mozbrowsericonchange“ "mozbrowsersecuritychange" "mozbrowsercontextmenu“ "mozbrowsererror" "mozbrowserkeyevent“ "mozbrowsershowmodalprompt" "mozbrowseropenwindow“ "mozbrowserclose" */
  • 34. Web APIs – Certified • Camera API • Idle API • Mobile Connection API • Network Stats API • Permissions API • Power Management API • Settings API • Time/Clock API • Voicemail • WebBluetooth • WebSMS • WebTelephony • WiFi Information API OS/OEM
  • 36. Web Activities • browse • configure • costcontrol • dial • Open • new • mail • websms/sms • webcontacts/contact • pick • record • save-bookmark • share • view • update packaged hosted
  • 37. Pick var activity = new MozActivity({ name: "pick", //Provide the data required //by the filter of the activity data: { type: "image/jpeg" } });
  • 38. Pick activity.onsuccess = function () { var img = document.createElement("img"); if (this.result.blob.type.indexOf("image") != -1) { img.src = window.URL.createObjectURL(this.result.blob); } }; activity.onerror = function () { //error };
  • 39. Dial var call = new MozActivity({ name: "dial", data: { number: "+46777888999" } });
  • 40. Web Activity Received Handler "activities": { "pick": { "filters": { "type": ["image/jpeg", "image/png"] }, "disposition": "inline", "returnValue": true, "href": "/index.html#pick" } }
  • 41. Don’t forget to handle it! navigator.mozSetMessageHandler('activity', function(activityRequest) { var option = activityRequest.source; if (activityRequest.source.name === "pick") { // Do something to handle the activity if (picture) { activityRequest.postResult(picture); } else { activityRequest.postError("Unable to provide a picture"); } } });
  • 53. To infinity, and beyond… Creative Commons: http://j.mp/1gIdcPF
  • 54. More Web APIs & features • Calendar API • FileHandle API Sync API • Keyboard/IME API WebRTC • HTTP-cache API • Peer to Peer API • Spellcheck API LogAPI • Resource lock API • UDP Datagram Socket API • WebNFC • WebUSB
  • 55. Next time you’ll build a mobile app Think about HTML5 & Firefox OS
  • 56. Resources Firefox OS Simulator http://j.mp/fxosSimulator Firefox OS App Manager http://j.mp/fxosAppManager Mozilla Developer Network https://developer.mozilla.org StackOverflow forum http://j.mp/fxosStackOverflow Firefox OS Boilerplate http://j.mp/fxosBoilerplate
  • 57. Frédéric Harper fharper@mozilla.com @fharper http://hacks.mozilla.org http://outofcomfortzone.net