Chrome DevTools Protocol: วิธียกเลิกการสมัคร 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 ที่เป็นไปได้ Page.javascriptDialogOpeningเพิ่มผู้ฟัง11 คน ใช้ 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});
});