Protokol DevTools Chrome: Cara berhenti berlangganan acara Page.javascriptDialogOpening

Sep 08 2020

Saya menggunakan fungsi Chrome DevTools Protocol API untuk mendengarkan javascriptDialogOpeningacara tersebut. Di bawah ini adalah kodenya.

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

Saya mendapat kesalahan: MaxListenersExceededWarning: Kemungkinan kebocoran memori EventEmitter terdeteksi. 11 Page.javascriptDialogOpeningpendengar ditambahkan. Gunakan emitter.setMaxListeners () untuk meningkatkan batas

Jawaban

1 NicholasDiPiazza Sep 10 2020 at 13:35

Dengan meletakkan javascriptDialogOpeningregistrasi event di navigatehandler, Anda menambahkan handler berulang kali. Karena setiap kali peristiwa navigasi terjadi, Anda menambahkan kembali pengendali peristiwa ini.

Apa yang Anda inginkan di sini adalah memasukkan javascriptDialogOpeningpendaftaran acara ke dalam kode inisialisasi Anda. Jika Anda melakukan ini, ini hanya akan didaftarkan sekali dan Anda tidak akan mengalami masalah ini lagi.

CDP({'host': host, 'port': port}, (client) => {
// ...
    Page.javascriptDialogOpening((params) => {
      Page.handleJavaScriptDialog({'accept': true});
    });