Protocolo Chrome DevTools: como cancelar a inscrição do evento Page.javascriptDialogOpening

Sep 08 2020

Estou usando as funções da API de protocolo do Chrome DevTools para ouvir o javascriptDialogOpeningevento. Abaixo está o 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);
  });
}

Recebi um erro: MaxListenersExceededWarning: Possível vazamento de memória EventEmitter detectado. 11 Page.javascriptDialogOpeningouvintes adicionados. Use emitter.setMaxListeners () para aumentar o limite

Respostas

1 NicholasDiPiazza Sep 10 2020 at 13:35

Ao colocar o javascriptDialogOpeningregistro do evento no navigatemanipulador, você está adicionando o manipulador repetidamente. Porque toda vez que um evento de navegação acontece, você está adicionando novamente este manipulador de eventos.

O que você realmente quer aqui é colocar o javascriptDialogOpeningregistro do evento em seu código de inicialização. Se você fizer isso, ele será registrado apenas uma vez e você não terá mais esse problema.

CDP({'host': host, 'port': port}, (client) => {
// ...
    Page.javascriptDialogOpening((params) => {
      Page.handleJavaScriptDialog({'accept': true});
    });