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});
    });