mirror of
https://github.com/HeyPuter/browser.js.git
synced 2026-11-14 18:14:50 -10:00
40 lines
1.1 KiB
HTML
40 lines
1.1 KiB
HTML
<title>Proxy Sandbox Controller</title>
|
|
<script>
|
|
function wake(controller) {
|
|
window.parent.postMessage({ $sandboxsw$type: "ready" }, "*");
|
|
}
|
|
navigator.serviceWorker
|
|
.register("/sw.js", {
|
|
scope: "./",
|
|
})
|
|
.then((registration) => {
|
|
if (navigator.serviceWorker.controller) {
|
|
// there's probably already a service worker
|
|
wake(navigator.serviceWorker.controller);
|
|
} else {
|
|
// there's no service worker, wait until we're controlled
|
|
navigator.serviceWorker.addEventListener("controllerchange", () => {
|
|
wake(navigator.serviceWorker.controller);
|
|
});
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.error("Service Worker registration failed:", error);
|
|
window.parent.postMessage(
|
|
{ $sandboxsw$type: "initerror", message: error.message },
|
|
"*"
|
|
);
|
|
});
|
|
|
|
// chrome -> controller -> service worker
|
|
window.addEventListener("message", (event) => {
|
|
if (!navigator.serviceWorker.controller) {
|
|
console.error("No service worker controller to send message to.");
|
|
return;
|
|
}
|
|
|
|
// forward messageport
|
|
navigator.serviceWorker.controller.postMessage(event.data, event.ports);
|
|
});
|
|
</script>
|