Chrome DevTools-Protokoll: Abbestellen des Page.javascriptDialogOpening-Ereignisses
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
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});
});