Protocolo Chrome DevTools: cómo cancelar la suscripción del evento Page.javascriptDialogOpening
Estoy usando las funciones de la API del protocolo Chrome DevTools para escuchar el javascriptDialogOpeningevento. A continuación se muestra el código.
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);
});
}
Recibí un error: MaxListenersExceededWarning: Posible fuga de memoria EventEmitter detectada. Se Page.javascriptDialogOpeningagregaron 11 oyentes. Utilice emitter.setMaxListeners () para aumentar el límite
Respuestas
Al colocar el javascriptDialogOpeningregistro de eventos en el navigatecontrolador, está agregando el controlador una y otra vez. Porque cada vez que ocurre un evento de navegación, vuelve a agregar este controlador de eventos.
Lo que realmente desea aquí es poner el javascriptDialogOpeningregistro del evento en su código de inicialización. Si hace esto, se registrará solo una vez y ya no tendrá este problema.
CDP({'host': host, 'port': port}, (client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});