diff --git a/src/loader.ts b/src/loader.ts index 66acfc7..6a56e5f 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -320,12 +320,13 @@ export async function loadApp( unmountSandbox = sandboxContainer.unmount; } - const { beforeUnmount = [], afterUnmount = [], afterMount = [], beforeMount = [], beforeLoad = [] } = mergeWith( - {}, - getAddOns(global, assetPublicPath), - lifeCycles, - (v1, v2) => concat(v1 ?? [], v2 ?? []), - ); + const { + beforeUnmount = [], + afterUnmount = [], + afterMount = [], + beforeMount = [], + beforeLoad = [], + } = mergeWith({}, getAddOns(global, assetPublicPath), lifeCycles, (v1, v2) => concat(v1 ?? [], v2 ?? [])); await execHooksChain(toArray(beforeLoad), app, global); @@ -338,11 +339,8 @@ export async function loadApp( sandboxContainer?.instance?.latestSetProp, ); - const { - onGlobalStateChange, - setGlobalState, - offGlobalStateChange, - }: Record = getMicroAppStateActions(appInstanceId); + const { onGlobalStateChange, setGlobalState, offGlobalStateChange }: Record = + getMicroAppStateActions(appInstanceId); // FIXME temporary way const syncAppWrapperElement2Sandbox = (element: HTMLElement | null) => (initialAppWrapperElement = element); diff --git a/src/sandbox/patchers/interval.ts b/src/sandbox/patchers/interval.ts index 3d63fc0..de8eb62 100644 --- a/src/sandbox/patchers/interval.ts +++ b/src/sandbox/patchers/interval.ts @@ -14,7 +14,7 @@ export default function patch(global: Window) { global.clearInterval = (intervalId: number) => { intervals = intervals.filter((id) => id !== intervalId); - return rawWindowClearInterval(intervalId); + return rawWindowClearInterval.call(window, intervalId as any); }; global.setInterval = (handler: CallableFunction, timeout?: number, ...args: any[]) => { diff --git a/src/sandbox/snapshotSandbox.ts b/src/sandbox/snapshotSandbox.ts index 9774b36..3d22055 100644 --- a/src/sandbox/snapshotSandbox.ts +++ b/src/sandbox/snapshotSandbox.ts @@ -8,7 +8,8 @@ import { SandBoxType } from '../interfaces'; function iter(obj: typeof window, callbackFn: (prop: any) => void) { // eslint-disable-next-line guard-for-in, no-restricted-syntax for (const prop in obj) { - if (obj.hasOwnProperty(prop)) { + // patch for clearInterval for compatible reason, see #1490 + if (obj.hasOwnProperty(prop) || prop === 'clearInterval') { callbackFn(prop); } }