I'd like to prevent users from right-clicking on a Chromium instance generated in Puppeteer. How can I do this?
Asked
Active
Viewed 309 times
1 Answers
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