Electron中如何设置网页窗口最大事件监听器以修复下载不全问题
解决Electron窗口与Puppeteer的最大事件监听器限制问题
首先明确:
process.setMaxListeners(0)是修改进程级的事件监听器上限,而你打开的官网窗口是BrowserWindow实例,它的事件监听器上限是独立的,所以要针对窗口实例设置:
找到你创建官网窗口的代码,获取对应的BrowserWindow对象,直接调用它的setMaxListeners方法:// 假设你创建官网窗口的代码示例 const { BrowserWindow } = require('electron'); const schoolWindow = new BrowserWindow({ // 你的窗口配置项 }); // 给该窗口设置监听器上限,比如设为20(足够覆盖14份下载任务) schoolWindow.setMaxListeners(20); // 也可以设为0表示无限制(不推荐,可能隐藏内存泄漏风险) // schoolWindow.setMaxListeners(0);结合你用到的
puppeteer-in-electron,还要注意关联的PuppeteerPage实例的监听器上限:
当你通过pie.getPage(schoolWindow)获取到Page对象后,同样给它设置监听器上限:const pie = require('puppeteer-in-electron'); const puppeteer = require('puppeteer-core'); // 关联窗口与Page实例 const page = await pie.getPage(schoolWindow); // 给Page设置监听器上限 page.setMaxListeners(20);额外排查点:
检查你的下载逻辑中是否存在重复绑定事件的情况(比如每次下载都调用一次page.on('download', ...)),这会导致监听器数量快速累积。如果是这种情况,改成用page.once('download', ...)(单次触发自动移除),或者在任务完成后调用page.removeListener手动移除不需要的监听器,从根源减少监听器数量。
内容的提问来源于stack exchange,提问作者Adnan Zaki
相关产品推荐
相关产品推荐

