获取当前通过window.open打开的窗口数量

1,044 阅读1分钟

最近有个场景是这样的:用户经过一系列的搜索后,获取到一个列表页,每一个列表项都是可以查看详情的,产品要求用户可以同时打开多个详情,方便做对比。

开发提供两个方案,一个是打开新窗口,一个是打开新tab页。最终选用方案是打开新窗口。查看MDN介绍可知,打开新窗口时,占用的资源远大于打开新tab页,并且新tab页可以很直观的看到当前浏览器打开的tab数量,从而人为控制tab数量,不至于卡死浏览器;但是新窗口很容易被覆盖,特别是浏览器主窗口处于最大化的时候,这样就隐含一个问题,用户不知不觉中打开大量窗口未关闭,从而占用许多浏览器资源(CPU,内存等),极易引发 # ERR_INSUFFICIENT_RESOURCES 现象。

那么如何控制当前打开的窗口数量呢?

MDN window.open()

let windowObjectReference = window.open(strUrl, strWindowName, [strWindowFeatures]); 通过window.open 打开新窗口可以获取到打开窗口的 对象引用,通过对象引用的 closed属性可以检测到当前打开的窗口是否处于关闭状态,剩下的就是每次打开收集下新窗口的对象引用,每次打开前遍历状态检测数量,从而将打开量控制在一定的区间内,防止页面挂掉。

image.png