diff --git a/devtools/projects/shell-browser/src/app/content-script.ts b/devtools/projects/shell-browser/src/app/content-script.ts index 8b168fbb933..86271521ebd 100644 --- a/devtools/projects/shell-browser/src/app/content-script.ts +++ b/devtools/projects/shell-browser/src/app/content-script.ts @@ -90,3 +90,22 @@ if (!backendInitialized) { }; retry(); } + +const proxyEventFromWindowToDevToolsExtension = (event: MessageEvent) => { + if (event.source === window && event.data) { + try { + chrome.runtime.sendMessage(event.data); + } catch (e) { + const {message} = e as Error; + if (message.includes('Extension context invalidated.')) { + console.error( + 'Angular DevTools: Disconnecting content script due to invalid extension context. Please reload the page.', + ); + window.removeEventListener('message', proxyEventFromWindowToDevToolsExtension); + } + throw e; + } + } +}; + +window.addEventListener('message', proxyEventFromWindowToDevToolsExtension); diff --git a/devtools/projects/shell-browser/src/app/ng-validate.ts b/devtools/projects/shell-browser/src/app/ng-validate.ts index 6d41ba06c4b..178e360120a 100644 --- a/devtools/projects/shell-browser/src/app/ng-validate.ts +++ b/devtools/projects/shell-browser/src/app/ng-validate.ts @@ -8,12 +8,6 @@ /// -window.addEventListener('message', (event: MessageEvent) => { - if (event.source === window && event.data) { - chrome.runtime.sendMessage(event.data); - } -}); - if (document.contentType === 'text/html') { const script = document.createElement('script'); script.src = chrome.runtime.getURL('app/detect_angular_for_extension_icon_bundle.js');