Skip to content

Instantly share code, notes, and snippets.

@jonnyom
Last active October 19, 2022 10:15
Show Gist options
  • Save jonnyom/9e763cbc38d7f9669b482f7e593d1f9a to your computer and use it in GitHub Desktop.
Save jonnyom/9e763cbc38d7f9669b482f7e593d1f9a to your computer and use it in GitHub Desktop.
Experimenting with using JavaScript service workers hosted on a separate CDN
importScripts('https://cdn.evervault.com/serviceWorker.js');
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('customer-page.js', {scope: '/'}).then(
function (registration) {
console.log(
'ServiceWorker registration successful with scope: ',
registration.scope
);
},
function (err) {
console.log('ServiceWorker registration failed: ', err);
}
);
});
}
<!-- @format -->
<!DOCTYPE html>
<header>
<title>Service boi</title>
// include this to register service worker
<script src="https://cdn.jonny.com/register.js"></script>
<script>
window
.fetch('https://anything.hello.com', {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'bob@testing.com',
social_identity: 'abc123',
name: 'bob',
}),
})
.then((r) => {
console.log('Fetch happened', r);
});
</script>
</header>
<body>
<p>Hello</p>
</body>
serialize = (request) => {
let headers = {};
for (let entry of request.headers.entries()) {
headers[entry[0]] = entry[1];
}
let serialized = {
url: 'https://testing.com',
headers: headers,
method: request.method,
mode: request.mode,
credentials: request.credentials,
cache: request.cache,
redirect: request.redirect,
referrer: request.referrer,
};
// Only if method is not `GET` or `HEAD` is the request allowed to have body.
if (request.method !== 'GET' && request.method !== 'HEAD') {
return request
.clone()
.text()
.then((body) => {
serialized.body = body;
return Promise.resolve(serialized);
});
}
return Promise.resolve(serialized);
};
self.addEventListener('fetch', (event) => {
let response;
if (event.request.url.includes('anything')) {
const newEvent = event.request.clone();
response = serialize(event.request).then((serializedRequest) => {
return fetch(serializedRequest.url, serializedRequest).then((r) => {
return r;
});
});
} else {
response = fetch(event.request).then((r) => {
return r;
});
}
event.respondWith(response);
});
@Rishab1207
Copy link

Rishab1207 commented Oct 19, 2022

@jonnyom Haven't tried your code but were you able to register service-worker through this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment