mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-16 07:30:02 -04:00
fix: more service worker emu stuff
This commit is contained in:
parent
f38ea98054
commit
88d76852d6
2 changed files with 23 additions and 17 deletions
|
@ -15,9 +15,12 @@ export default function (client: ScramjetClient, self: typeof window) {
|
||||||
},
|
},
|
||||||
set(ctx, value: string) {
|
set(ctx, value: string) {
|
||||||
client.cookieStore.setCookies([value], client.url);
|
client.cookieStore.setCookies([value], client.url);
|
||||||
|
const controller = client.descriptors.get(
|
||||||
if (client.serviceWorker.controller) {
|
"ServiceWorkerContainer.prototype.controller",
|
||||||
client.serviceWorker.controller!.postMessage({
|
client.serviceWorker
|
||||||
|
);
|
||||||
|
if (controller) {
|
||||||
|
client.natives.call("ServiceWorker.prototype.postMessage", controller, {
|
||||||
scramjet$type: "cookie",
|
scramjet$type: "cookie",
|
||||||
cookie: value,
|
cookie: value,
|
||||||
url: client.url.href,
|
url: client.url.href,
|
||||||
|
|
|
@ -13,10 +13,6 @@ export const enabled = (client: ScramjetClient) =>
|
||||||
export function disabled(_client: ScramjetClient, _self: Self) {
|
export function disabled(_client: ScramjetClient, _self: Self) {
|
||||||
Reflect.deleteProperty(Navigator.prototype, "serviceWorker");
|
Reflect.deleteProperty(Navigator.prototype, "serviceWorker");
|
||||||
}
|
}
|
||||||
let realPostMessage;
|
|
||||||
if (self.ServiceWorker) {
|
|
||||||
realPostMessage = ServiceWorker.prototype.postMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function (client: ScramjetClient, _self: Self) {
|
export default function (client: ScramjetClient, _self: Self) {
|
||||||
let registration;
|
let registration;
|
||||||
|
@ -39,40 +35,47 @@ export default function (client: ScramjetClient, _self: Self) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
client.Proxy("navigator.serviceWorker.getRegistration", {
|
client.Proxy("ServiceWorkerContainer.prototype.getRegistration", {
|
||||||
apply(ctx) {
|
apply(ctx) {
|
||||||
ctx.return(new Promise((resolve) => resolve(registration)));
|
ctx.return(new Promise((resolve) => resolve(registration)));
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
client.Proxy("navigator.serviceWorker.getRegistrations", {
|
client.Proxy("ServiceWorkerContainer.prototype.getRegistrations", {
|
||||||
apply(ctx) {
|
apply(ctx) {
|
||||||
ctx.return(new Promise((resolve) => resolve([registration])));
|
ctx.return(new Promise((resolve) => resolve([registration])));
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
client.Trap("navigator.serviceWorker.ready", {
|
client.Trap("ServiceWorkerContainer.prototype.ready", {
|
||||||
get(_ctx) {
|
get(_ctx) {
|
||||||
console.log(registration);
|
|
||||||
|
|
||||||
return new Promise((resolve) => resolve(registration));
|
return new Promise((resolve) => resolve(registration));
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
client.Proxy("navigator.serviceWorker.register", {
|
client.Trap("ServiceWorkerContainer.prototype.controller", {
|
||||||
|
get(ctx) {
|
||||||
|
return registration?.active;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
client.Proxy("ServiceWorkerContainer.prototype.register", {
|
||||||
apply(ctx) {
|
apply(ctx) {
|
||||||
if (ctx.args[0] instanceof URL) ctx.args[0] = ctx.args[0].href;
|
|
||||||
let url = rewriteUrl(ctx.args[0], client.meta) + "?dest=serviceworker";
|
let url = rewriteUrl(ctx.args[0], client.meta) + "?dest=serviceworker";
|
||||||
if (ctx.args[1] && ctx.args[1].type === "module") {
|
if (ctx.args[1] && ctx.args[1].type === "module") {
|
||||||
url += "&type=module";
|
url += "&type=module";
|
||||||
}
|
}
|
||||||
|
|
||||||
const worker = client.natives.construct("SharedWorker", url);
|
const worker = client.natives.construct("SharedWorker", url);
|
||||||
|
|
||||||
const handle = worker.port;
|
const handle = worker.port;
|
||||||
|
const controller = client.descriptors.get(
|
||||||
|
"ServiceWorkerContainer.prototype.controller",
|
||||||
|
client.serviceWorker
|
||||||
|
);
|
||||||
|
|
||||||
realPostMessage.call(
|
client.natives.call(
|
||||||
client.serviceWorker.controller,
|
"ServiceWorker.prototype.postMessage",
|
||||||
|
controller,
|
||||||
{
|
{
|
||||||
scramjet$type: "registerServiceWorker",
|
scramjet$type: "registerServiceWorker",
|
||||||
port: handle,
|
port: handle,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue