Protocole Chrome DevTools: comment se désabonner de l'événement Page.javascriptDialogOpening

Sep 08 2020

J'utilise les fonctions de l'API Chrome DevTools Protocol pour écouter l' javascriptDialogOpeningévénement. Ci-dessous le code.

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

J'ai eu une erreur: MaxListenersExceededWarning: possible fuite de mémoire EventEmitter détectée. 11 Page.javascriptDialogOpeningauditeurs ajoutés. Utilisez emitter.setMaxListeners () pour augmenter la limite

Réponses

1 NicholasDiPiazza Sep 10 2020 at 13:35

En plaçant l' javascriptDialogOpeningenregistrement d'événement dans le navigategestionnaire, vous ajoutez le gestionnaire encore et encore. Parce qu'à chaque fois qu'un événement de navigation se produit, vous ajoutez à nouveau ce gestionnaire d'événements.

Ce que vous voulez vraiment ici, c'est mettre l' javascriptDialogOpeningenregistrement d'événement dans votre code d'initialisation. Si vous faites cela, il ne sera enregistré qu'une seule fois et vous n'aurez plus ce problème.

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