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'; 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>