Protocollo Chrome DevTools: come annullare l'iscrizione all'evento Page.javascriptDialogOpening
Sto utilizzando le funzioni dell'API del protocollo DevTools di Chrome per ascoltare l' javascriptDialogOpeningevento. Di seguito il codice.
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);
});
}
Ho ricevuto un errore: MaxListenersExceededWarning: Possibile perdita di memoria EventEmitter rilevata. 11 Page.javascriptDialogOpeningascoltatori aggiunti. Usa emitter.setMaxListeners () per aumentare il limite
Risposte
Inserendo la javascriptDialogOpeningregistrazione dell'evento nel navigategestore, si aggiunge il gestore più e più volte. Perché ogni volta che si verifica un evento di navigazione, stai riaggiungendo questo gestore di eventi.
Quello che vuoi veramente qui è inserire la javascriptDialogOpeningregistrazione dell'evento nel tuo codice di inizializzazione. Se lo fai, verrà registrato solo una volta e non avrai più questo problema.
CDP({'host': host, 'port': port}, (client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});