1

我正在使用 Chrome DevTools 协议 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 内存泄漏。增加了11Page.javascriptDialogOpening位听众。使用emitter.setMaxListeners() 增加限制

4

1 回答 1

1

通过将javascriptDialogOpening事件注册放入navigate处理程序中,您将一遍又一遍地添加处理程序。因为每次发生导航事件时,您都在重新添加此事件处理程序。

您真正想要的是将javascriptDialogOpening事件注册放入您的初始化代码中。如果您这样做,它将只注册一次,您将不再遇到此问题。

CDP({'host': host, 'port': port}, (client) => {
// ...
    Page.javascriptDialogOpening((params) => {
      Page.handleJavaScriptDialog({'accept': true});
    });
于 2020-09-10T13:35:48.963 回答