diff --git a/src/webkit/wkPage.ts b/src/webkit/wkPage.ts index c82a031015..b7cc5832ce 100644 --- a/src/webkit/wkPage.ts +++ b/src/webkit/wkPage.ts @@ -202,6 +202,8 @@ export class WKPage implements PageDelegate { frame._contextDestroyed(context); } } + if (!framePayload.parentId) + this._workers.clear(); this._page._frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url, framePayload.name || '', framePayload.loaderId, initial); } diff --git a/src/webkit/wkWorkers.ts b/src/webkit/wkWorkers.ts index e2ed737752..13de199ace 100644 --- a/src/webkit/wkWorkers.ts +++ b/src/webkit/wkWorkers.ts @@ -31,8 +31,7 @@ export class WKWorkers { setSession(session: WKSession) { helper.removeEventListeners(this._sessionListeners); - this._page._clearWorkers(); - this._workerSessions.clear(); + this.clear(); this._sessionListeners = [ helper.addEventListener(session, 'Worker.workerCreated', async (event: Protocol.Worker.workerCreatedPayload) => { const worker = new Worker(event.url); @@ -62,10 +61,14 @@ export class WKWorkers { }), helper.addEventListener(session, 'Worker.dispatchMessageFromWorker', (event: Protocol.Worker.dispatchMessageFromWorkerPayload) => { const workerSession = this._workerSessions.get(event.workerId)!; + if (!workerSession) + return; workerSession.dispatchMessage(JSON.parse(event.message)); }), helper.addEventListener(session, 'Worker.workerTerminated', (event: Protocol.Worker.workerTerminatedPayload) => { const workerSession = this._workerSessions.get(event.workerId)!; + if (!workerSession) + return; workerSession.dispose(); this._workerSessions.delete(event.workerId); this._page._removeWorker(event.workerId); @@ -73,6 +76,11 @@ export class WKWorkers { ]; } + clear() { + this._page._clearWorkers(); + this._workerSessions.clear(); + } + async initializeSession(session: WKSession) { await session.send('Worker.enable'); }