Also available in: English
Vous avez certainement connu ces boutons pour « Copier dans le presse-papier » utilisant pirouette en Flash pour passer outre un blocage de sécurité de nos navigateurs ? Avec l’évolution des API en JS et l’écoute de la demande des développeurs, il est possible depuis maintenant quelques temps de le faire en JS, nativement.
La technique est relativement simple puisqu’elle consiste en l’exploitation de la fonction execCommand()
disponible au niveau du document
.
Qu’est-ce que execCommand()
La fonction execCommand() se présente ainsi :
document.execCommand( commandName, showDefaultUI, valueArgument );
où les paramètres représentent :
commandName
:
le nom d’une commande à exécuter (copy
,paste
,undo
,redo
,insertHTML
, etc.)showDefaultUI
:
true
oufalse
, pour afficher ou non l’interface par défaut (pas supporté par Mozilla actuellement)valueArgument
:
pour les commandes qui ont besoin d’un argument supplémentaire, comme par exemple la commandeinsertImage
qui attend une URL en valeur.
Elle permet comme son nom l’indique d’exécuter une commande dans la fenêtre courante. Pour une documentation plus complète, l’article du MDN est une bonne ressource.
Exemple de code
Je vais aller au plus simple pour ce code JS, je vous laisserai cliquer sur le lien de la démo (qui contient le code également) un peu plus bas si vous voulez un exemple plus complet d’implémentation.
Imaginons ce code HTML :
<textarea id="to-copy">Write something and copy it into your clipboard by clicking in the button below.</textarea>
<button id="copy" type="button">Copy in clipboard</button>
Le code JavaScript suivant, très sommaire, permet déjà de placer dans votre presse-papier le contenu du textarea. Vous pouvez ensuite coller ce contenu où bon vous semble. (autre champ, document, etc.)
var toCopy = document.getElementById( 'to-copy' ),
btnCopy = document.getElementById( 'copy' );
btnCopy.addEventListener( 'click', function(){
toCopy.select();
document.execCommand( 'copy' );
return false;
} );
Lorsque document.execCommand()
s’est bien exécutée, elle retourne true
, à l’inverse si ça s’est mal passé (pas de support ou erreur) elle retourne false
.
Je vous laisse imaginer ce qu’il est possible de faire avec du coup. D’ailleurs en voici un exemple :
N’hésitez pas à partager votre code sur CodePen et dans les commentaires pour nous montrer ce que vous avez fait avec cette idée.
Amusez-vous bien !
Merci pour cet article. Ca permet d’éviter d’utiliser Flash qui disparait progressivement avec les nouvelles MAJ des navigateurs actuels.
Aurais-tu des informations par rapport à la compatibilité de cette méthode avec les anciens navigateurs?
Hello,
Je viens de rajouter le tableau de support de Can I Use. Il va jusqu’à IE8 de mémoire 🙂
Merci! C’est noté 🙂
Merci pour l’information. Je me suis longtemps posé la question de l’interaction de Javascript et du presse-papiers.
Une fonction qui me faisait cruellement défaut et à côté de laquelle j’étais passé… Merci pour l’article.
Merciiii
Simple et efficace!!! merci bien!!!
Je cherchais cette fonction, beaucoup plus facile à intégrer que clipboard.js.
Par contre, pourquoi lorsqu’on supprime le textarea pour copier ça ne fonctionne plus ?
Bon j’ai trouvé, j’ai remplacé le textarea id= »cleared » par un div id= »cleared »
Pas vraiment propre :/
Génial… ça tombe bien à ce qui concerne ce que je veux implémenter maintenant.
Génial ! Explication limpide avec exemples
Beau travail et un grand Merci !