I'm trying to figure out if there's a way to stop users from taking screenshots of content on a static web app. From my research, it looks like screenshotting is an operating system feature and doesn't trigger events in the web browser, making it tricky to control. I'm open to any workarounds for both desktop and mobile browsers.
I've looked into a few options:
1. Using methods like detecting visibility changes, page focus/blur, and key detection (though this last one doesn't work for mobile).
2. Exploring DRM solutions, which would involve converting static content into a media format played in a way that doesn't allow for scrolling or selection. However, I'm worried about the limitations this would bring as it would no longer be standard HTML and more like an image.
I'd love to hear if anyone has any ideas or implementations that could achieve this aim.
5 Answers
Unfortunately, there's no guaranteed way to block screenshots on a static web app. Screenshots are handled at the OS level, and there aren't any browser events that can stop them. Your heuristics—like visibility change and focus/blur—won't work either because users can always use external cameras or even developer tools to bypass them. A DRM solution might convert your HTML content into a non-scrollable video, but even that can be recorded by disabling GPU rendering. Ultimately, if pixels hit the screen, they can be captured. Your best options would be to apply invisible watermarks or require user login with audit logs.
Short answer: no. Long answer: nope.
If someone really wants to take a screenshot of your content, they're probably going to find a way to do it. I mean, you can certainly try to make it more difficult, but true prevention is nearly impossible. This might just lead to a poorer experience for all your users in the end.
I know this isn't directly answering your question, but I'm really curious about your use case for wanting to stop screenshots. What's the reason behind it?
I don't have a specific case in mind. I got interested in DRM practices and how streaming sites prevent piracy, and I was wondering if similar measures could work for static content.
Nah, it's just not feasible.

That's a fair point! I was mainly exploring the possibility of implementing such functionality. Just curious if it could ever be done.