J'ai juste fait ça par intérêt. Je suis d'accord que ce n'est pas la bonne chose à faire, mais je pense que cela devrait être la décision de l'opérateur... En outre, le code pourrait facilement être étendu pour ajouter des fonctionnalités, plutôt que de les supprimer (comme un presse-papiers plus avancé, ou Ctrl + s déclencher une sauvegarde côté serveur).
$(document).ready(function() {
var ctrlDown = false,
ctrlKey = 17,
cmdKey = 91,
vKey = 86,
cKey = 67;
$(document).keydown(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
}).keyup(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
});
$(".no-copy-paste").keydown(function(e) {
if (ctrlDown && (e.keyCode == vKey || e.keyCode == cKey)) return false;
});
// Document Ctrl + C/V
$(document).keydown(function(e) {
if (ctrlDown && (e.keyCode == cKey)) console.log("Document catch Ctrl+C");
if (ctrlDown && (e.keyCode == vKey)) console.log("Document catch Ctrl+V");
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Ctrl+c Ctrl+v disabled</h3>
<textarea class="no-copy-paste"></textarea>
<br><br>
<h3>Ctrl+c Ctrl+v allowed</h3>
<textarea></textarea>
Aussi, juste pour clarifier, ce script nécessite la bibliothèque jQuery.
Démonstration du Codepen
EDIT : suppression de 3 lignes redondantes (impliquant e.which) grâce à la suggestion de Tim Down (voir commentaires)
EDIT : ajout du support pour les Macs ( cmd au lieu de ctrl )
4 votes
À quoi cela sert-il ? Les deux seuls scénarios légitimes auxquels je peux penser sont les champs de mot de passe (que vous ne pouvez pas copier de toute façon) et un test de vitesse de frappe. Je suis sûr que vous pouvez détecter les frappes rapides suspectes.
0 votes
Oui, tu devrais probablement donner tes raisons ou inventer une raison légitime. Comme le test de vitesse de frappe... mais même pour ça, je ne pense pas qu'un textarea soit le bon contrôle.
11 votes
@Paul Butcher, @Propeng : Il y a des scénarios, où vous avez besoin de cela. Un exemple très simple : Un site pour apprendre des langues étrangères. L'effet d'apprentissage est renforcé si vous tapez les mots à la main au lieu d'utiliser le copier-coller.
1 votes
Bon point, mais dans une situation d'apprentissage, il n'est pas nécessaire d'appliquer cette restriction, car l'utilisateur voudra le saisir. Ce n'est que lors des tests que vous devez vous assurer que les réponses qu'ils donnent sont réellement saisies par eux, et même dans ce cas, s'ils ont accès à une réponse à copier et coller, ils peuvent tout aussi bien la copier manuellement, donc cela ne sert à rien.
3 votes
Une autre situation légitime pourrait être celle où la double saisie est nécessaire pour détecter les erreurs (par exemple, tapez votre adresse électronique deux fois, pour que nous sachions qu'il n'y a pas de faute de frappe). Toutefois, un tel utilisateur pourrait conserver une liste d'adresses électroniques générées de manière aléatoire (par exemple, sneakemail), et voudrait probablement la coller pour en vérifier l'exactitude.
49 votes
@Paul Butcher - ce n'est pas du tout une situation légitime, je déteste sites qui font ça et je toujours copier/coller mon adresse e-mail (longue) d'une entrée à l'autre. La rupture du copier/coller est un problème majeur d'utilisabilité. Elle déstabilise vraiment l'utilisateur, car elle est si fondamentale dans son modèle mental qu'il s'attend à ce qu'elle "fonctionne". C'est comme si vous essayiez de tirer une porte et qu'elle s'éloignait de vous au lieu de se rapprocher de vous !
1 votes
Il faudrait également détecter/restricter un clic droit, pour empêcher le collage.
0 votes
Nécessaire pour une programmation sérieuse des applications bioinformatiques. Sheesh.
0 votes
Une raison de détecter le copier/coller (plutôt le coller dans mon cas) est de limiter la longueur d'un champ. Actuellement, j'utilise le clavier et je vérifie la longueur, mais le clavier n'est pas déclenché lorsque vous utilisez le collage. C'est agréable d'avoir la possibilité d'utiliser la touche keypress au lieu d'écrire un roman pour se rendre compte qu'il n'y a plus d'espace depuis longtemps.
0 votes
Ce que j'aimerais, c'est un moyen propre et simple d'ÉVITER cette détection. Je déteste totalement les sites web qui ajoutent "vérifier sur l'URL" lorsque je copie-colle une information à des amis. Dommage qu'il n'y ait pas d'url "frappez l'auteur".
1 votes
N'oubliez pas le combo shift+insert
4 votes
Lorsqu'un tel copier-coller n'est pas autorisé dans une page, ce que je fais, c'est coller le texte ailleurs (j'utilise la barre d'URL) et ensuite Ctrl + A (sélectionner le texte qui vient d'être collé dans l'url), le glisser-déposer dans le champ dans le navigateur, où le collage est désactivé. Je suppose que c'est quelque chose qui ne peut être évité à ce jour.
1 votes
Je crois que j'ai une raison légitime pour vous tous :) Je suis en train de concevoir une page web avec une interface pseudo-unix, c'est-à-dire une fausse ligne de commande avec seulement quelques commandes. Dans ce cas, je veux que ^C agisse comme il le ferait sur une ligne de commande, au lieu de coller. --- Ceci étant dit, cette lecture a été précieuse, et je m'assurerai d'ajouter un moyen de laisser l'utilisateur coller des choses. Je ne pense pas qu'il puisse en avoir besoin, mais je suis d'accord avec le fait que les sites qui le limitent sont souvent problématiques. --- En tout cas, bravo !
0 votes
Une application légitime à laquelle je peux penser est le champ de vérification des mots de passe et des adresses électroniques : si vous détectez ctrl+v dans le champ de vérification de l'adresse électronique de l'utilisateur, le champ de vérification de l'adresse électronique de l'utilisateur peut être utilisé.
name="email"
vous le copiez automatiquement sur lename="repeat-email"
et si vous ne le détectez pas, vous interdisez le collage dans le champ de vérification.