问题描述
我正在使用Chrome DevTools协议API函数来监听javascriptDialogopening
事件。下面是代码。
async navigate(url: URL,target: any) {
const { Page } = target.connection;
// Enable the required protocol features
await Page.enable();
// Add a listener and handler for JavaScript dialogs
Page.javascriptDialogopening(async(event: Protocol.Page.JavascriptDialogopeningEvent) => {
// Respond with a confirmation to all dialogs
const dialogResponse: Protocol.Page.HandleJavaScriptDialogRequest = {
'accept': true
};
Page.handleJavaScriptDialog(dialogResponse);
});
}
我收到一个错误:MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。添加了11个Page.javascriptDialogopening
侦听器。使用generator.setMaxListeners()增加限制
解决方法
通过将javascriptDialogOpening
事件注册放入navigate
处理程序中,您可以一次又一次添加处理程序。因为每次导航事件发生,您都要重新添加此事件处理程序。
您这里真正想要的是将javascriptDialogOpening
事件注册放入初始化代码中。如果这样做,它将仅注册一次,并且不再有此问题。
CDP({'host': host,'port': port},(client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});