Protocollo Chrome DevTools: come annullare l'iscrizione all'evento Page.javascriptDialogOpening

Sep 08 2020

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

1 NicholasDiPiazza Sep 10 2020 at 13:35

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});
    });