Protocolo Chrome DevTools: como cancelar a inscrição do evento Page.javascriptDialogOpening
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
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});
});