web-dev-qa-db-fra.com

Empêcher l'utilisateur d'utiliser la touche "Impr écran" / "Impr écran" du clavier pour toute page Web

Je fais actuellement un projet, dans lequel je dois empêcher l'utilisateur de prendre l'instantané de n'importe quelle page Web, pour lequel il peut utiliser la touche "Print Scrn"/"Printscreen" disponible dans l'un des claviers normaux.

J'ai essayé de trouver sa solution, mais en vain. Si possible, je dois prendre en compte le module complémentaire "Screengrab" du navigateur Firefox, en l’arrêtant également.

Toute aide est grandement appréciée, et j'utilise PHP (comme langage côté serveur) & jQuery pour mon projet.

51
Knowledge Craving

Vous ne pouvez pas désactiver la capture d'écran à partir du navigateur Web, cela ne serait possible qu'en installant un logiciel supplémentaire sur le PC de l'utilisateur.

Il existe des outils IRM (Information Rights Management) qui le font, par exemple en protégeant les appels API Windows/DirectX et en surveillant également la mémoire vidéo telle que Oracle IRM ou telle que technologie IRM de Microsoft .

En particulier, ce dernier pourrait être intéressant car il existe également un Rights Management Add-on pour Internet Explorer .

Mais comme d'autres l'ont déjà dit, toute technologie IRM/DRM est controversée et vous devez comprendre qu'elle limitera ou ennuiera le plus souvent vos utilisateurs.

38
Dirk Vollmar

Je déteste la phrase "ce n'est pas possible". Voici toutes les solutions combinées pour vous aider:

1- Vous pouvez récupérer la solution de Haluk:

<script type="text/javascript"> $(document).ready(function() {
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        $("body").hide();
      }

    }); }); 
</script>

CEPENDANT, vous cachez le corps, mais il est déjà "imprimé" dans le presse-papiers. Vous pouvez déclencher un autre événement qui copie du texte dans votre presse-papiers, comme vous pouvez le voir sur cette réponse "Modifier à partir de 2016" Cliquez sur le bouton copier dans le presse-papiers à l'aide de jQuery , c'est quelque chose comme ceci:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

Cela bloquera une partie de votre problème. Si l'utilisateur se concentre sur un autre objet en dehors de ces fenêtres, il pourra prendre des captures d'écran. ** Mais il existe une autre solution à cela, désactivez simplement le corps du trou lorsque la fenêtre n'est pas mise au point. Solution complète, de votre cher ami brésilien:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

$(window).focus(function() {
  $("body").show();
}).blur(function() {
  $("body").hide();
});

Voici l'exemple de travail:

Here i try to unfocus the window, on unfocus i hide content and show modal

45
Marcelo Rocha

Ce n'est pas possible.

43
Sjoerd

Heureusement, cette idée scandaleuse n'est pas possible à mettre en œuvre de manière fiable, ni la partie "désactiver la capture d'écran" ni celle "désactiver les extensions Firefox de l'utilisateur". Et même si c'était le cas, comme le souligne @kbok dans son commentaire ci-dessus, vous n'avez pas à droite pour ce faire.

La seule façon de protéger votre contenu en ligne est les lois sur le droit d'auteur - les mentionner suffit souvent pour effrayer les gens de ne pas en abuser! - ou ne pas le montrer du tout.

15
Pekka 웃

Essaye ça

$(document).keyup(function(e){
  if(e.keyCode == 44) return false;
});

Esperons que ça marche

14
ZX12R

Vous pouvez modifier le contenu du presse-papiers à l'aide de JavaScript ou de Flash. Cela aide déjà un peu.

6
Leo

Comme l'a dit @Sjoerd, ce n'est pas possible.

S'il s'agit d'images que vous souhaitez protéger, je vous suggère par exemple d'afficher des images de qualité inférieure qui sont filigranées à la place et d'afficher uniquement celles de haute qualité non filigranées lorsque cela est approprié.

Mais ouais ... Si vous voulez qu'il soit impossible de les copier ... ne les mettez pas en ligne.

4
Svish

Vous pouvez copier dans le presse-papiers autre chose, lorsque l'utilisateur clique sur l'écran d'impression des touches. Ceci est un exemple et je copie le texte de l'utilisateur.

<p id="test">test</p>

function copyToClipboard(elementId) {

  // Create a "hidden" input
  var aux = document.createElement("input");

  // Assign it the value of the specified element
  aux.setAttribute("value", document.getElementById(elementId).innerHTML);

  // Append it to the body
  document.body.appendChild(aux);

  // Highlight its content
  aux.select();

  // Copy the highlighted text
  document.execCommand("copy");

  // Remove it from the body
  document.body.removeChild(aux);

}
$(document).ready(function(){
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        copyToClipboard('test');
      };
    });
});
4
Piotr Kazuś

Il n'y a pas de méthode directe pour le faire, cependant, il existe un moyen de protéger votre contenu autant que possible contre prnt scrn.

L'idée est la suivante:

  1. rendre votre contenu inaccessible si Java est désactivé, et utiliser un script comme la protection contre la copie d'Artist Scope.

  2. La détection de prnt scrn enverra un message à l'administrateur avec les informations utilisateur enregistré , cela signifie que le contenu restreint accessible uniquement aux membres peut en bénéficier. l'envoi des adresses IP [~ # ~] [~ # ~] semble être une bonne idée, mais l'interdiction des adresses IP ne l'est pas, vous n'aurez donc pas beaucoup d'avantages.

  3. Une fois hors de la fenêtre de votre site Web, votre contenu sera recouvert d'une superposition qui ne peut être supprimée que si vous revenez sur votre site Web et l'activez, ce qui réactivera le code de détection prnt scrn mentionné au point précédent.

  4. Si l'appareil est un mobile, vous pouvez masquer des images ou, comme dans mon cas, rediriger vers une page "nous sommes désolés".

  5. L'outil de capture et d'autres extensions de navigateur et modules complémentaires similaires seront inutiles. sauf un outil que j'ai trouvé appelé capture d'écran pleine page

    • cet outil capture le contenu Web après environ 3 secondes après avoir appuyé sur le bouton, ce qui est assez de temps pour ignorer la superposition et revenir à votre contenu
    • un bon retournement consiste à démarrer un compteur lorsque "rejeter la superposition" est cliqué qui aura besoin de 5 secondes ou plus, c'est-à-dire. après que cette extension ait déjà pris un instantané
  6. Il existe également une méthode indirecte pour empêcher la capture vidéo, toujours en cours, la publierai ici ou sur mon blog.

  7. Si votre contenu en vaut vraiment la peine, les utilisateurs peuvent toujours le capturer à l'aide de leurs caméras, il peut également y avoir une méthode pour cela! Mais je dois encore faire quelques recherches avant d'en parler.

Je mettrai à jour cet article dans mon blog pour d'autres techniques que j'ai utilisées/utiliserai pour plus de protection. Veuillez vérifier ce quiz (toujours en cours de développement) pour une démonstration.

3
iJassar

Pourquoi voulez-vous empêcher l'écran d'impression?

Si ce sont des photos que vous souhaitez protéger, vous pouvez les mettre en basse résolution et inclure une sorte de logo de copyright par programmation dans php.

Je pense que c'est à peu près tout.

2
SRKX

Voici une autre solution:

<script type="text/javascript"> $(document).ready(function() {
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        $("body").hide();
      }

    }); }); </script>

Ceci est similaire à la solution de @ ZX12R. L'avantage est que ce code fonctionnera même si le logiciel de capture d'écran d'impression est un outil tiers (par exemple snagIt).

Vous pouvez remplacer $("body").hide(); par quelque chose qui vous conviendra mieux. Par exemple, vous pouvez masquer toutes les images $("img").hide(); et peut-être les afficher une seconde plus tard.

L'inconvénient est que cela ne fonctionnera pas si la page Web n'est pas la fenêtre active.

1
Haluk