Chrome DevTools-Protokoll: Abbestellen des Page.javascriptDialogOpening-Ereignisses

Sep 08 2020

Ich verwende die Chrome DevTools Protocol API-Funktionen, um das javascriptDialogOpeningEreignis abzuhören . Unten ist der 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);
  });
}

Ich habe eine Fehlermeldung erhalten: MaxListenersExceededWarning: Möglicher EventEmitter-Speicherverlust festgestellt. 11 Page.javascriptDialogOpeningHörer hinzugefügt. Verwenden Sie emitter.setMaxListeners (), um das Limit zu erhöhen

Antworten

1 NicholasDiPiazza Sep 10 2020 at 13:35

Indem Sie die javascriptDialogOpeningEreignisregistrierung in den navigateHandler einfügen, fügen Sie den Handler immer wieder hinzu. Da Sie jedes Mal, wenn ein Navigationsereignis auftritt, diesen Ereignishandler erneut hinzufügen.

Was Sie hier wirklich wollen, ist, die javascriptDialogOpeningEreignisregistrierung in Ihren Initialisierungscode aufzunehmen. Wenn Sie dies tun, wird es nur einmal registriert und Sie haben dieses Problem nicht mehr.

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