Chrome DevTools 프로토콜 : Page.javascriptDialogOpening 이벤트 구독 취소 방법
Sep 08 2020
Chrome DevTools Protocol API 함수를 사용하여 javascriptDialogOpening이벤트 를 수신하고 있습니다. 아래는 코드입니다.
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);
});
}
오류가 발생했습니다. MaxListenersExceededWarning : 가능한 EventEmitter 메모리 누수가 감지되었습니다. 11 명의 Page.javascriptDialogOpening청취자가 추가되었습니다. 제한을 늘리려면 emitter.setMaxListeners ()를 사용하십시오.
답변
1 NicholasDiPiazza Sep 10 2020 at 13:35
핸들러에 javascriptDialogOpening이벤트 등록 을 배치하면 navigate핸들러를 반복해서 추가하게됩니다. 탐색 이벤트가 발생할 때마다이 이벤트 핸들러를 다시 추가하기 때문입니다.
여기서 정말로 원하는 것은 javascriptDialogOpening초기화 코드에 이벤트 등록 을 넣는 것 입니다. 이렇게하면 한 번만 등록되며 더 이상이 문제가 발생하지 않습니다.
CDP({'host': host, 'port': port}, (client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});