experiments in a post-browser web
at main 51 lines 1.3 kB view raw
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>