Chrome DevTools Protocol: Page.javascriptDialogOpening ईवेंट को अनसब्सक्राइब कैसे करें

Sep 08 2020

मैं javascriptDialogOpeningइवेंट को सुनने के लिए Chrome DevTools Protocol API फ़ंक्शन का उपयोग कर रहा हूं । नीचे कोड है।

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