UNPKG

iportal

Version:

web-portal

37 lines (35 loc) 1.3 kB
const getTimerHandler = (handler: TimerHandler, moduleWindow: Window, stretch?: boolean) => { return (..._args: any[]) => { const run = () => { if (typeof handler === 'function') { handler(..._args) } else if (typeof handler === 'string') { const evalHander = new moduleWindow['Function'](`return ${handler}`) evalHander(..._args) } } if (moduleWindow['moduleVisibilityState'] === 'visible') { run() } else if (stretch) { moduleWindow.addEventListener('module-visible', () => { run() }) } } } export const smartSetTimeout = (moduleWindow: Window) => { const realSetTimeout = moduleWindow.setTimeout moduleWindow.setTimeout = (handler: TimerHandler, timeout?: number | undefined, ...args: any[]) => { const fn = getTimerHandler(handler, moduleWindow, true) const intervalId = realSetTimeout(fn, timeout, ...args) return intervalId } } export const smartSetInterval = (moduleWindow: Window) => { const realSetInterval = moduleWindow.setInterval moduleWindow.setInterval = (handler: TimerHandler, timeout?: number | undefined, ...args: any[]) => { const fn = getTimerHandler(handler, moduleWindow) const intervalId = realSetInterval(fn, timeout, ...args) return intervalId } }