Protokol DevTools Chrome: Cara berhenti berlangganan acara Page.javascriptDialogOpening
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
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});
});