web-portals
Version:
web-portals
30 lines (28 loc) • 1.13 kB
text/typescript
const getTimerHandler = (handler: TimerHandler, moduleWindow: Window) => {
return (..._args: any[]) => {
if (moduleWindow['moduleVisibilityState'] === 'visible') {
if (typeof handler === 'function') {
handler(..._args)
} else if (typeof handler === 'string') {
const evalHander = new moduleWindow['Function'](`return ${handler}`)
evalHander(..._args)
}
}
}
}
export const smartSetTimeout = (moduleWindow: Window) => {
const realSetTimeout = moduleWindow.setTimeout
moduleWindow.setInterval = (handler: TimerHandler, timeout?: number | undefined, ...args: any[]) => {
const fn = getTimerHandler(handler, moduleWindow)
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
}
}