0

I'd like to prevent users from right-clicking on a Chromium instance generated in Puppeteer. How can I do this?

jamesfdearborn
  • 769
  • 1
  • 10
  • 26

1 Answers1

0

The most efficient way to do it is to register a function that will run before opening any new page:

await page.evaluateOnNewDocument(() => 
    document.addEventListener('contextmenu', event => event.preventDefault()) 
);

Of course the target page could remove and/or reassign that event listener. So another way is to wait for the page to load (or wait for some selector) and create event listener again:

await page.evaluate(() =>
    document.addEventListener('contextmenu', event => event.preventDefault())
);

Or you could do an even more devious thing and hijack document.addEventListener to disallow adding contextmenu event listeners at all:

await page.evaluateOnNewDocument(() => { 

      document.addEventListener('contextmenu', event => event.preventDefault())

      const realAddEventListener = document.addEventListener;

      document.addEventListener = function(type, listener){
          type === 'contextmenu' || realAddEventListener.apply(this, arguments);
      };
  }
);

(based on this answer and its comment)

Vaviloff
  • 16,282
  • 6
  • 48
  • 56