// content.js - content script (runs in content script world) (function() { // Inject the record library + inject script into page function loadScripts(callback) { // Load record.umd.cjs first const script1 = document.createElement('script'); script1.src = chrome.runtime.getURL('record.umd.cjs'); script1.onload = function() { script1.remove(); // Then load inject.js const script2 = document.createElement('script'); script2.src = chrome.runtime.getURL('inject.js'); script2.onload = function() { script2.remove(); }; (document.head || document.documentElement).appendChild(script2); }; (document.head || document.documentElement).appendChild(script1); } // Listen for messages from inject.js (page context) window.addEventListener('message', function(event) { if (event.source !== window) return; const data = event.data; if (!data || !data.__rrweb_action) return; if (data.__rrweb_action === 'event') { // Forward event to background chrome.runtime.sendMessage({ action: 'event', data: data.__rrweb_data }); } }); // Listen for messages from background chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { if (msg.action === 'startRecord') { loadScripts(); sendResponse({ ok: true }); } else if (msg.action === 'stopRecord') { window.postMessage({ __rrweb_action: 'stop' }, '*'); sendResponse({ ok: true }); } // Don't return true for unrelated messages }); console.log('[rrweb] Content script loaded'); })();