experiments in a post-browser web
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; worker-src blob:;">
6 <title>Scripts Extension</title>
7</head>
8<body>
9<script type="module">
10 import extension from './background.js';
11
12 const api = window.app;
13 const extId = extension.id;
14
15 console.log(`[ext:${extId}] background.html loaded`);
16
17 // Initialize extension BEFORE publishing ext:ready
18 // (commands must be registered before lazy stub re-publishes)
19 if (extension.init) {
20 console.log(`[ext:${extId}] calling init()`);
21 await extension.init();
22 }
23
24 // Signal ready to main process
25 api.publish('ext:ready', {
26 id: extId,
27 manifest: {
28 id: extension.id,
29 labels: extension.labels,
30 version: '1.0.0'
31 }
32 }, api.scopes.SYSTEM);
33
34 // Handle shutdown request from main process
35 api.subscribe('app:shutdown', () => {
36 console.log(`[ext:${extId}] received shutdown`);
37 if (extension.uninit) {
38 extension.uninit();
39 }
40 }, api.scopes.SYSTEM);
41
42 // Handle extension-specific shutdown
43 api.subscribe(`ext:${extId}:shutdown`, () => {
44 console.log(`[ext:${extId}] received extension shutdown`);
45 if (extension.uninit) {
46 extension.uninit();
47 }
48 }, api.scopes.SYSTEM);
49</script>
50</body>
51</html>