Protocole Chrome DevTools: comment se désabonner de l'événement Page.javascriptDialogOpening
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
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});
});