The web becomes more „native“
Carsten Sandtner (@casarock)
WEBAPIs
Hi My name is
Head of development //mediaman GMBH
Mozilla Rep
Javascript enthusiast and web developer
since 1998.
Carsten Sandtner
@casarock
https://flic.kr/p/a5WzoV
Web APIs - JAX 2015 - @casarock
The first browser war...
Microsoft vs. Netscape!
Web APIs - JAX 2015 - @casarock
Arms race of features
Everyone invented new and "better" features!
support other features? Hell, NO!
Web APIs - JAX 2015 - @casarock
And this happened...
Web APIs - JAX 2015 - @casarock
Standards? Which standards?
"We know what you want!"
W3C - ignored...
Web APIs - JAX 2015 - @casarock
And Web Developers?
Implemented pretty good browser detection
Web APIs - JAX 2015 - @casarock
And Browser vendors?
Browser Vendors wanted to be "supported"
... and this happened:
Web APIs - JAX 2015 - @casarock
Faking User Agents
Mosaic/0.9 // grandmother of all!
Mozilla/2.02 [fr] (WinNT; I) // Netscapes first!
Mozilla/4.0 (compatible; MSIE 4.0; Windows 98) // IE4!
Funny? There are more…
Web APIs - JAX 2015 - @casarock
Faking User Agents - part 2
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 // Firefox!
Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU) KHTML/KHTMLVersion (like Gecko) // Konqueror
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1 // Safari!
And chrome?
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko)
Chrome/0.2.149.29 Safari/525.13
But Opera?
Opera/8.0 (Windows NT 5.1; U; en)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95
Safari/537.36 OPR/15.0.1147.153
Web APIs - JAX 2015 - @casarock
Faking User Agents - the End
And Spartan?
Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/36.0.1985.143 Safari/537.36 Edge/12.0
Web APIs - JAX 2015 - @casarock
At the end
Everything is a Mozilla...
Web APIs - JAX 2015 - @casarock
and Internet Explorer won the
first browser war
Development stopped for 5 years!
"Optimized for IE 6!"
Standards? IE was the standard!
Web APIs - JAX 2015 - @casarock
The second browser war...
The rise of the others
Web APIs - JAX 2015 - @casarock
The others
Other browser vendors raised
They keep standards in mind and develop
them together
Web APIs - JAX 2015 - @casarock
Standards, everywhere standards!
There is not only one "tool" for the internet
Web APIs - JAX 2015 - @casarock
New Feature: Implemented a
STANDARD!
Web APIs - JAX 2015 - @casarock
Competition?
Still exisits, but:
Performance!
Security!
Release cycles!
Web APIs - JAX 2015 - @casarock
Unique characteristic?
Add ons, technical features, developer tools etc..
Developers are being targeted.
Web APIs - JAX 2015 - @casarock
“Make the Internet a better place”
Web APIs - JAX 2015 - @casarock
The web Wins!
Web APIs - JAX 2015 - @casarock
The "mobile" Web
Web APIs - JAX 2015 - @casarock
The "real" mobile Web
Web APIs - JAX 2015 - @casarock
Everything changes...
Web developers want ...
... access to hardware features
... access Calendar, Addressbook
etc.
We got it!
But: Lessons learned from the past
Web APIs - JAX 2015 - @casarock
Standards!
Web APIs - JAX 2015 - @casarock
New technologies need new APIs
Vendors are working together
Service Workers (Google&Mozilla)
Web Components (Google&Mozilla)
WebGL etc.
Web APIs - JAX 2015 - @casarock
“The web is everywhere”
Web APIs - JAX 2015 - @casarock
“The web in your hands”
Web APIs - JAX 2015 - @casarock
Mobiles need new APIs
iPhone 2007: No SDK, just HTML5!
A smartphone without a browser? Unbelieveable!
Smartphones pushed HTML5
Web APIs - JAX 2015 - @casarock
HTML5 based OS
Web APIs - JAX 2015 - @casarock
HTML5 OS needs new APIs
Firefox OS is open source and with standards in mind
Mozilla introduced new APIs for mobile devices
Consistent use of APIs
Web APIs - JAX 2015 - @casarock
APIs submitted to W3C
Adopted by other mobile browsers ...
... and desktop browsers
more features, more fun!
Web APIs - JAX 2015 - @casarock
Web APIs
tell me more
Web APIs - JAX 2015 - @casarock
Definition
“WebAPI is a term used to refer to a suite of device compatibility and
access APIs that allow Web apps and content to access device
hardware (such as battery status or the device vibration hardware), as
well as access to data stored on the device (such as the calendar or
contacts list).
By adding these APIs, we hope to expand what the Web can do
today and only proprietary platforms were able to do in the past.”
Web APIs - JAX 2015 - @casarock
Disclaimer
Some WebAPIs are not (yet) a standard
I've marked them with a *
Web APIs - JAX 2015 - @casarock
Categories
Web APIs could be categorized
Communication
Datamanagement
Hardware access
"other"
Web APIs - JAX 2015 - @casarock
Communication
Network Information API
Bluetooth*, Mobile Connection API*,Network Stats API*, TCP Socket API*, Telephony*,
WebSMS*,
Web APIs - JAX 2015 - @casarock
Datamanagement
IndexedDB, Contacts API
FileHandle API*, Device Storage API*,
Web APIs - JAX 2015 - @casarock
Hardware access
Light events, Battery status, Geolocation, Pointer Lock,
Proximity, Device orientation, Screen orientation, Vibration API
WebFM API*, Camera API*, Power Management API*
Web APIs - JAX 2015 - @casarock
"Other"
Alarm API, Push API, Web Notifications, Service Worker
Apps API*, Web Activities*, WebPayment API*, Browser API*, Permissions API*, Time/
Clock API*
Web APIs - JAX 2015 - @casarock
Examples?
Web APIs - JAX
Network Connection
var connection = navigator.connection ||
navigator.mozConnection ||
navigator.webkitConnection;
var type = connection.type;
function updateConnectionStatus() {
console.log("Connection type is change from " + type + " to " + connection.type);
type = connection.type;
}
connection.addEventListener('typechange', updateConnectionStatus);
Information about the system's connection
12+
12+ 2.2+
Web APIs - JAX 2015 - @casarock
BBC News
Network Information API
Warns when cellular connection detected
and video should be played
Web APIs - JAX 2015 - @casarock
Firefox Marketplace
Network Information API
Paying via carrier billing - Cellular detected
Web APIs - JAX 2015 - @casarock
Firefox Marketplace
Network Information API
When WIFI is detected
Confirmation code via SMS
Web APIs - JAX 2015 - @casarock
Notification
// At first, let's check if we have permission for notification
// If not, let's ask for it
if (Notification && Notification.permission !== "granted") {
Notification.requestPermission(function (status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
});
}
if (Notification && Notification.permission === "granted") {
var n = new Notification("Hi!");
}
22+
12+
22+ 25+ 6+
Web APIs - JAX 2015 - @casarock
Google KEEP
Notifications
Web APIs - JAX 2015 - @casarock
HEISE.DE
Notifications
Web APIs - JAX 2015 - @casarock
Light Events
window.ondevicelight = function(event) {
// Read out the lux value
console.log(event.value);
};
Get current ambient light intensity
22+
15+
Web APIs - JAX 2015 - @casarock
Battery Status (old)
var battery = navigator.battery ||
navigator.mozBattery ||
navigator.webkitBattery,
info = {
charging: battery.charging,
chargingTime: parseInt(battery.chargingTime / 60, 10),
dischargingTime: parseInt(battery.dischargingTime / 60, 10),
level: Math.round(battery.level * 100)
};
function updateBatteryStatus() {
batterylevel.innerHTML = battery.level * 100 + " %";
batterystatus.innerHTML = battery.charging ? "" : "not";
}
battery.addEventListener("chargingchange", updateBatteryStatus);
battery.addEventListener("levelchange", updateBatteryStatus);
Information about the system's battery charge level and lets you be
notified by events that are sent when the battery level changes
16+
16+
Web APIs - JAX 2015 - @casarock
Battery Status (NEW)
function updateBatteryStatus(battery) {
// do stuff
}
navigator.getBattery().then(function(battery) {
// Update the battery status initially when the promise resolves ...
updateBatteryStatus(battery);
// .. and for any subsequent updates.
battery.onchargingchange = function () {
updateBatteryStatus(battery);
};
battery.onlevelchange = function () {
updateBatteryStatus(battery);
};
battery.ondischargingtimechange = function () {
updateBatteryStatus(battery);
};
});
38+ 25+
39+ 25+
Web APIs - JAX 2015 - @casarock
Detecting device orientation
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var alpha = event.alpha; // Z-Axis
var beta = event.beta; // Y-Axis
var gamma = event.gamma; // X-Axis
// Do stuff with the new orientation data
}
Detection orientation and motion events
7+ 6+ 11+
6+ 3+ 4.2+
Web APIs - JAX 2015 - @casarock
Detecting device orientation
window.addEventListener("devicemotion", handleMotion, true);
function handleMotion(event) {
var x = event.accelerationIncludingGravity.x;
var y = event.accelerationIncludingGravity.y;
var z = event.accelerationIncludingGravity.z;
var r = event.rotationRate;
}
Information about the speed of changes for the device's position
and orientation.
6+ 11+
6+ 4.2+
Web APIs - JAX 2015 - @casarock
Vibration API
var pattern = [200, 100, 200, 200, 100],
goodVibration = navigator.vibrate(pattern);
Rumble in your pocket!
11+
Web APIs - JAX 2015 - @casarock
Screen orientation
screen.addEventListener("orientationchange", function () {
console.log("The orientation of the screen is: " + screen.orientation);
});
Listening orientation change
screen.lockOrientation('landscape');
Preventing orientation change
38+ 11+ 25+
39+
Web APIs - JAX 2015 - @casarock
Page visibility
The Page Visibility API lets you know when a webpage is visible or
in focus
if (document.hidden) {
// stop video etc.
}
document.addEventListener("visibilitychange", handleVisibilityChange, false);
function handleVisibilityChange() {
if (document.hidden) {
// stop something. e.g. stop a video, audio etc...
} else {
// do something else ;) play video, audio... you got it?
}
}
33+ 10+ 12.10+18+ 7+
12.10+10+ 7+ 4.4+18+
Beta
Web APIs - JAX 2015 - @casarock
Service Workers
navigator.serviceWorker.register('/myworker.js').then(function(reg) {
console.log('Registered', reg);
}, function(err) {
console.log('Error', err);
});
ServiceWorker is a background worker. It is complex. This is a
simplified explanation!
Web APIs - JAX 2015 - @casarock
Service Workers cont.
console.log("started");
self.addEventListener('install', function(event) {
console.log("installed");
});
self.addEventListener('activate', function(event) {
console.log("activated");
});
self.addEventListener('fetch', function(event) {
console.log("fetch");
event.respondWith(new Response("My response!!"));
});
myworker.js
Web APIs - JAX 2015 - @casarock
Service Workers caching
importScripts('serviceworker-cache-polyfill.js');
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open('name-my-cache-v1').then(function(cache) {
return cache.addAll([
'/',
'/styles/all.css',
'/imgs/myimg.png',
'/scripts/awesome.js'
]);
})
)
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request).then(function(response) {
return response || fetch(event.request);
})
);
});
cache some stuff.
Web APIs - JAX 2015 - @casarock
Google IO 2015
Service Worker
Web APIs - JAX 2015 - @casarock
OK
Some live examples...
Web APIs - JAX 2015 - @casarock
Ambient light
Ambient Light Demo
Web APIs - JAX 2015 - @casarock
Notifications
Notifications Demo
Web APIs - JAX 2015 - @casarock
Battery
Battery API Demo
Web APIs - JAX 2015 - @casarock
And of course: Have FUN!
Fun, fun, fun
https://www.youtube.com/watch?
v=kqvBvIV8mCE
Web APIs - JAX 2015 -
Service Worker
Web APIs - JAX 2015 - @casarock
Conclusion
Standards are cool!
WebAPIs allow us to build cooler web apps
WebAPIs are not a "mobile"-thingy!
The "Web" becomes (more) "native"
Thank you!
@casarock
hallo@appsbu.de
Slides & Examples: casarock.github.io
Carsten Sandtner

Web apis JAX 2015 - Mainz

  • 2.
    The web becomesmore „native“ Carsten Sandtner (@casarock) WEBAPIs
  • 3.
    Hi My nameis Head of development //mediaman GMBH Mozilla Rep Javascript enthusiast and web developer since 1998. Carsten Sandtner @casarock
  • 4.
  • 5.
    Web APIs -JAX 2015 - @casarock The first browser war... Microsoft vs. Netscape!
  • 6.
    Web APIs -JAX 2015 - @casarock Arms race of features Everyone invented new and "better" features! support other features? Hell, NO!
  • 7.
    Web APIs -JAX 2015 - @casarock And this happened...
  • 8.
    Web APIs -JAX 2015 - @casarock Standards? Which standards? "We know what you want!" W3C - ignored...
  • 9.
    Web APIs -JAX 2015 - @casarock And Web Developers? Implemented pretty good browser detection
  • 10.
    Web APIs -JAX 2015 - @casarock And Browser vendors? Browser Vendors wanted to be "supported" ... and this happened:
  • 11.
    Web APIs -JAX 2015 - @casarock Faking User Agents Mosaic/0.9 // grandmother of all! Mozilla/2.02 [fr] (WinNT; I) // Netscapes first! Mozilla/4.0 (compatible; MSIE 4.0; Windows 98) // IE4! Funny? There are more…
  • 12.
    Web APIs -JAX 2015 - @casarock Faking User Agents - part 2 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 // Firefox! Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU) KHTML/KHTMLVersion (like Gecko) // Konqueror Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1 // Safari! And chrome? Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13 But Opera? Opera/8.0 (Windows NT 5.1; U; en) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50 Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153
  • 13.
    Web APIs -JAX 2015 - @casarock Faking User Agents - the End And Spartan? Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0
  • 14.
    Web APIs -JAX 2015 - @casarock At the end Everything is a Mozilla...
  • 15.
    Web APIs -JAX 2015 - @casarock and Internet Explorer won the first browser war Development stopped for 5 years! "Optimized for IE 6!" Standards? IE was the standard!
  • 16.
    Web APIs -JAX 2015 - @casarock The second browser war... The rise of the others
  • 17.
    Web APIs -JAX 2015 - @casarock The others Other browser vendors raised They keep standards in mind and develop them together
  • 18.
    Web APIs -JAX 2015 - @casarock Standards, everywhere standards! There is not only one "tool" for the internet
  • 19.
    Web APIs -JAX 2015 - @casarock New Feature: Implemented a STANDARD!
  • 20.
    Web APIs -JAX 2015 - @casarock Competition? Still exisits, but: Performance! Security! Release cycles!
  • 21.
    Web APIs -JAX 2015 - @casarock Unique characteristic? Add ons, technical features, developer tools etc.. Developers are being targeted.
  • 22.
    Web APIs -JAX 2015 - @casarock “Make the Internet a better place”
  • 23.
    Web APIs -JAX 2015 - @casarock The web Wins!
  • 24.
    Web APIs -JAX 2015 - @casarock The "mobile" Web
  • 25.
    Web APIs -JAX 2015 - @casarock The "real" mobile Web
  • 26.
    Web APIs -JAX 2015 - @casarock Everything changes... Web developers want ... ... access to hardware features ... access Calendar, Addressbook etc. We got it! But: Lessons learned from the past
  • 27.
    Web APIs -JAX 2015 - @casarock Standards!
  • 28.
    Web APIs -JAX 2015 - @casarock New technologies need new APIs Vendors are working together Service Workers (Google&Mozilla) Web Components (Google&Mozilla) WebGL etc.
  • 29.
    Web APIs -JAX 2015 - @casarock “The web is everywhere”
  • 30.
    Web APIs -JAX 2015 - @casarock “The web in your hands”
  • 31.
    Web APIs -JAX 2015 - @casarock Mobiles need new APIs iPhone 2007: No SDK, just HTML5! A smartphone without a browser? Unbelieveable! Smartphones pushed HTML5
  • 32.
    Web APIs -JAX 2015 - @casarock HTML5 based OS
  • 33.
    Web APIs -JAX 2015 - @casarock HTML5 OS needs new APIs Firefox OS is open source and with standards in mind Mozilla introduced new APIs for mobile devices Consistent use of APIs
  • 34.
    Web APIs -JAX 2015 - @casarock APIs submitted to W3C Adopted by other mobile browsers ... ... and desktop browsers more features, more fun!
  • 35.
    Web APIs -JAX 2015 - @casarock Web APIs tell me more
  • 36.
    Web APIs -JAX 2015 - @casarock Definition “WebAPI is a term used to refer to a suite of device compatibility and access APIs that allow Web apps and content to access device hardware (such as battery status or the device vibration hardware), as well as access to data stored on the device (such as the calendar or contacts list). By adding these APIs, we hope to expand what the Web can do today and only proprietary platforms were able to do in the past.”
  • 37.
    Web APIs -JAX 2015 - @casarock Disclaimer Some WebAPIs are not (yet) a standard I've marked them with a *
  • 38.
    Web APIs -JAX 2015 - @casarock Categories Web APIs could be categorized Communication Datamanagement Hardware access "other"
  • 39.
    Web APIs -JAX 2015 - @casarock Communication Network Information API Bluetooth*, Mobile Connection API*,Network Stats API*, TCP Socket API*, Telephony*, WebSMS*,
  • 40.
    Web APIs -JAX 2015 - @casarock Datamanagement IndexedDB, Contacts API FileHandle API*, Device Storage API*,
  • 41.
    Web APIs -JAX 2015 - @casarock Hardware access Light events, Battery status, Geolocation, Pointer Lock, Proximity, Device orientation, Screen orientation, Vibration API WebFM API*, Camera API*, Power Management API*
  • 42.
    Web APIs -JAX 2015 - @casarock "Other" Alarm API, Push API, Web Notifications, Service Worker Apps API*, Web Activities*, WebPayment API*, Browser API*, Permissions API*, Time/ Clock API*
  • 43.
    Web APIs -JAX 2015 - @casarock Examples?
  • 44.
    Web APIs -JAX Network Connection var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection; var type = connection.type; function updateConnectionStatus() { console.log("Connection type is change from " + type + " to " + connection.type); type = connection.type; } connection.addEventListener('typechange', updateConnectionStatus); Information about the system's connection 12+ 12+ 2.2+
  • 45.
    Web APIs -JAX 2015 - @casarock BBC News Network Information API Warns when cellular connection detected and video should be played
  • 46.
    Web APIs -JAX 2015 - @casarock Firefox Marketplace Network Information API Paying via carrier billing - Cellular detected
  • 47.
    Web APIs -JAX 2015 - @casarock Firefox Marketplace Network Information API When WIFI is detected Confirmation code via SMS
  • 48.
    Web APIs -JAX 2015 - @casarock Notification // At first, let's check if we have permission for notification // If not, let's ask for it if (Notification && Notification.permission !== "granted") { Notification.requestPermission(function (status) { if (Notification.permission !== status) { Notification.permission = status; } }); } if (Notification && Notification.permission === "granted") { var n = new Notification("Hi!"); } 22+ 12+ 22+ 25+ 6+
  • 49.
    Web APIs -JAX 2015 - @casarock Google KEEP Notifications
  • 50.
    Web APIs -JAX 2015 - @casarock HEISE.DE Notifications
  • 51.
    Web APIs -JAX 2015 - @casarock Light Events window.ondevicelight = function(event) { // Read out the lux value console.log(event.value); }; Get current ambient light intensity 22+ 15+
  • 52.
    Web APIs -JAX 2015 - @casarock Battery Status (old) var battery = navigator.battery || navigator.mozBattery || navigator.webkitBattery, info = { charging: battery.charging, chargingTime: parseInt(battery.chargingTime / 60, 10), dischargingTime: parseInt(battery.dischargingTime / 60, 10), level: Math.round(battery.level * 100) }; function updateBatteryStatus() { batterylevel.innerHTML = battery.level * 100 + " %"; batterystatus.innerHTML = battery.charging ? "" : "not"; } battery.addEventListener("chargingchange", updateBatteryStatus); battery.addEventListener("levelchange", updateBatteryStatus); Information about the system's battery charge level and lets you be notified by events that are sent when the battery level changes 16+ 16+
  • 53.
    Web APIs -JAX 2015 - @casarock Battery Status (NEW) function updateBatteryStatus(battery) { // do stuff } navigator.getBattery().then(function(battery) { // Update the battery status initially when the promise resolves ... updateBatteryStatus(battery); // .. and for any subsequent updates. battery.onchargingchange = function () { updateBatteryStatus(battery); }; battery.onlevelchange = function () { updateBatteryStatus(battery); }; battery.ondischargingtimechange = function () { updateBatteryStatus(battery); }; }); 38+ 25+ 39+ 25+
  • 54.
    Web APIs -JAX 2015 - @casarock Detecting device orientation window.addEventListener("deviceorientation", handleOrientation, true); function handleOrientation(event) { var alpha = event.alpha; // Z-Axis var beta = event.beta; // Y-Axis var gamma = event.gamma; // X-Axis // Do stuff with the new orientation data } Detection orientation and motion events 7+ 6+ 11+ 6+ 3+ 4.2+
  • 55.
    Web APIs -JAX 2015 - @casarock Detecting device orientation window.addEventListener("devicemotion", handleMotion, true); function handleMotion(event) { var x = event.accelerationIncludingGravity.x; var y = event.accelerationIncludingGravity.y; var z = event.accelerationIncludingGravity.z; var r = event.rotationRate; } Information about the speed of changes for the device's position and orientation. 6+ 11+ 6+ 4.2+
  • 56.
    Web APIs -JAX 2015 - @casarock Vibration API var pattern = [200, 100, 200, 200, 100], goodVibration = navigator.vibrate(pattern); Rumble in your pocket! 11+
  • 57.
    Web APIs -JAX 2015 - @casarock Screen orientation screen.addEventListener("orientationchange", function () { console.log("The orientation of the screen is: " + screen.orientation); }); Listening orientation change screen.lockOrientation('landscape'); Preventing orientation change 38+ 11+ 25+ 39+
  • 58.
    Web APIs -JAX 2015 - @casarock Page visibility The Page Visibility API lets you know when a webpage is visible or in focus if (document.hidden) { // stop video etc. } document.addEventListener("visibilitychange", handleVisibilityChange, false); function handleVisibilityChange() { if (document.hidden) { // stop something. e.g. stop a video, audio etc... } else { // do something else ;) play video, audio... you got it? } } 33+ 10+ 12.10+18+ 7+ 12.10+10+ 7+ 4.4+18+
  • 59.
    Beta Web APIs -JAX 2015 - @casarock Service Workers navigator.serviceWorker.register('/myworker.js').then(function(reg) { console.log('Registered', reg); }, function(err) { console.log('Error', err); }); ServiceWorker is a background worker. It is complex. This is a simplified explanation!
  • 60.
    Web APIs -JAX 2015 - @casarock Service Workers cont. console.log("started"); self.addEventListener('install', function(event) { console.log("installed"); }); self.addEventListener('activate', function(event) { console.log("activated"); }); self.addEventListener('fetch', function(event) { console.log("fetch"); event.respondWith(new Response("My response!!")); }); myworker.js
  • 61.
    Web APIs -JAX 2015 - @casarock Service Workers caching importScripts('serviceworker-cache-polyfill.js'); self.addEventListener('install', function(event) { event.waitUntil( caches.open('name-my-cache-v1').then(function(cache) { return cache.addAll([ '/', '/styles/all.css', '/imgs/myimg.png', '/scripts/awesome.js' ]); }) ) }); self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request).then(function(response) { return response || fetch(event.request); }) ); }); cache some stuff.
  • 62.
    Web APIs -JAX 2015 - @casarock Google IO 2015 Service Worker
  • 63.
    Web APIs -JAX 2015 - @casarock OK Some live examples...
  • 64.
    Web APIs -JAX 2015 - @casarock Ambient light Ambient Light Demo
  • 65.
    Web APIs -JAX 2015 - @casarock Notifications Notifications Demo
  • 66.
    Web APIs -JAX 2015 - @casarock Battery Battery API Demo
  • 67.
    Web APIs -JAX 2015 - @casarock And of course: Have FUN! Fun, fun, fun
  • 68.
  • 69.
    Web APIs -JAX 2015 - Service Worker
  • 70.
    Web APIs -JAX 2015 - @casarock Conclusion Standards are cool! WebAPIs allow us to build cooler web apps WebAPIs are not a "mobile"-thingy! The "Web" becomes (more) "native"
  • 71.
    Thank you! @casarock hallo@appsbu.de Slides &Examples: casarock.github.io Carsten Sandtner