parliament
parliament

Reputation: 22934

Deno web workers - Cannot find name "window"

I'm trying to run a Deno app with a deno_webview and an http server but for some reason I cannot run both at the same time, calling webview.run() seems to block something and I can no longer reach my http server.

In order to prevent the blocking, I'm trying running either the server or the webview in a webworker, but in both scenarios I get the same error "Cannot find name 'window'"

What is the issue here?

api.webworker.ts

import { Application } from 'https://deno.land/x/oak/mod.ts';
const app = new Application();
await app.listen({ port: 8080 });

webview.webworker.ts

import { WebView } from 'https://deno.land/x/webview/mod.ts';
const webview = new WebView({ url: 'http://localhost:4200' });
await webview.run();

server.ts

const webviewWorker = new Worker(
   './workers/webview.worker.ts', { 
   type: 'module', 
   deno: true 
});

Error: enter image description here

const apiWorker = new Worker(
   './workers/api.worker.ts', { 
   type: 'module', 
   deno: true 
});

Error: enter image description here

Upvotes: 1

Views: 647

Answers (1)

Marcos Casagrande
Marcos Casagrande

Reputation: 40444

Web Workers don't have window object, you have to use self or globalThis

So https://deno.land/x/webview/mod.ts doesn't support being called from a Web Worker.

The library will need to change window usage to globalThis so it will work int the main process and inside workers.

Upvotes: 2

Related Questions