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';">
6 <title>Lists 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 // Initialize extension BEFORE signaling ready
16 // (lazy loading waits for ext:ready, so handlers must be registered first)
17 if (extension.init) {
18 await extension.init();
19 }
20
21 // Collect registered command topics for assertion verification
22 const registeredTopics = Object.keys(window._cmdHandlers || {})
23 .map(name => `cmd:execute:${name}`);
24
25 // Signal ready to main process
26 api.publish('ext:ready', {
27 id: extId,
28 registeredTopics,
29 manifest: {
30 id: extension.id,
31 labels: extension.labels,
32 version: '1.0.0'
33 }
34 }, api.scopes.SYSTEM);
35
36 // Handle shutdown request from main process
37 api.subscribe('app:shutdown', () => {
38 if (extension.uninit) {
39 extension.uninit();
40 }
41 }, api.scopes.SYSTEM);
42
43 // Handle extension-specific shutdown
44 api.subscribe(`ext:${extId}:shutdown`, () => {
45 if (extension.uninit) {
46 extension.uninit();
47 }
48 }, api.scopes.SYSTEM);
49</script>
50</body>
51</html>