From a776c1f82be0d52d261779fe3a18a35649aa8673 Mon Sep 17 00:00:00 2001 From: forehalo Date: Fri, 1 Nov 2024 08:11:35 +0000 Subject: [PATCH] fix(core): unregister global error handler once app running (#8659) close AF-1585 --- tools/cli/src/webpack/error-handler.js | 33 ++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/cli/src/webpack/error-handler.js b/tools/cli/src/webpack/error-handler.js index c1635eb79e..533d3fe202 100644 --- a/tools/cli/src/webpack/error-handler.js +++ b/tools/cli/src/webpack/error-handler.js @@ -67,11 +67,39 @@ if (typeof document !== 'undefined') { globalThis.addEventListener('unhandledrejection', handler); globalThis.addEventListener('error', handler); + + return function () { + globalThis.removeEventListener('unhandledrejection', handler); + globalThis.removeEventListener('error', handler); + }; + } + + return null; + } + + function unregisterRegisterGlobalErrorHandler(fn) { + if (typeof fn === 'function') { + var app = document.getElementById('app'); + if (app) { + var ob = new MutationObserver(function () { + fn(); + ob.disconnect(); + ob = null; + }); + + ob.observe(app, { childList: true }); + } } } function ensureBasicEnvironment() { - var globals = ['Promise', 'Map', 'fetch', 'customElements']; + var globals = [ + 'Promise', + 'Map', + 'fetch', + 'customElements', + 'MutationObserver', + ]; // eslint-disable-next-line @typescript-eslint/prefer-for-of for (var i = 0; i < globals.length; i++) { @@ -82,6 +110,7 @@ } } - registerGlobalErrorHandler(); ensureBasicEnvironment(); + var goodtogo = registerGlobalErrorHandler(); + unregisterRegisterGlobalErrorHandler(goodtogo); })();