Skip to content

Instantly share code, notes, and snippets.

@nolanlawson
Last active February 14, 2018 00:20
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save nolanlawson/91a7f5809f2e17a2e6a753a3cb8d2eec to your computer and use it in GitHub Desktop.
PromiseWorker ServiceWorker example
<!DOCTYPE html>
<html lang="en">
<title>
PromiseWorker ServiceWorker example
</title>
<body>
<h1>PromiseWorker ServiceWorker example</h1>
<pre id="display"></pre>
<script src="https://npmcdn.com/promise-worker/dist/promise-worker.js"></script>
<script src="main.js"></script>
</body>
</html>
function log(str) {
console.log(str);
display.innerHTML += str + '\n';
}
if (!('serviceWorker' in navigator)) {
log('serviceWorker unavailable in this browser, canceling');
} else {
navigator.serviceWorker.register('worker.js', {
scope: './'
}).then(function (registration) {
if (navigator.serviceWorker.controller) { // already active and controlling this page
return navigator.serviceWorker;
}
return new Promise(function (resolve, reject) {
registration.addEventListener('updatefound', function () {
var newWorker = registration.installing;
newWorker.addEventListener('statechange', function () {
if (newWorker.state == 'activated' && navigator.serviceWorker.controller) {
resolve(navigator.serviceWorker);
}
});
});
});
}).then(function (worker) { // the worker is ready
var promiseWorker = new PromiseWorker(worker);
var msg = {hello: 'worker'};
log('Sending message to worker: ' + JSON.stringify(msg));
return promiseWorker.postMessage(msg);
}).then(function (response) {
log('Got response: ' + JSON.stringify(response));
}).catch(log);
}
importScripts('https://npmcdn.com/promise-worker@1.1.1/dist/promise-worker.register.js');
registerPromiseWorker(function (msg) {
return {hello: 'main thread'};
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim()); // activate right now
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment