Copy to clipboard ?
Cette semaine, j’ai dû trouver le moyen de proposer un lien permettant de copier du texte dans le presse-papier dans une page HTML. On dirait pas comme ça, mais c’est pas évident et dans certains cas, ça peut être intéressant ! Après quelques heures de recherche en parcourant les pages de notre ami Google, j’ai pu finalement trouver une solution pour Internet Explorer et Firefox, mais pas pour les autres navigateurs. Voici donc le résultat de ma recherche…
Internet Explorer
Pour IE, j’ai trouvé principalement deux méthodes, avec quelques variantes. J’ai une nette préférence pour la première qui me paraît plus simple d’utilisation.
Méthode 1
La première méthode consiste à utiliser l’objet clipboardData disponible dans l’objet window depuis Internet Explorer 5. Cet objet permet d’interagir avec le presse-papier pour y copier ou y lire des données.
clipboardData possède entre autres la méthode setData(sDataFormat, sData) qui permet d’enregistrer un contenu dans le presse papier. Le paramètre sDataFormat peut prendre plusieurs valeurs, dont “Text” pour manipuler une chaine de caractères ; ce paramètre n’est pas sensible à la casse.
Pour plus d’information sur l’objet clipboardData, je vous renvoie à sa documentation.
On peut donc écrire une petite fonction permettant la copie d’un texte dans le presse-papier de la façon suivante :
Elle peut être appelée via un lien du type :
Méthode 2
La seconde solution que j’ai trouvée consiste à exploiter un champ de formulaire afin de créer un objet de type TextRange qui possède la méthode execCommand(sCommand) qui permet d’exécuter une commande ; par exemple la commande “Copy” permettra de copier le contenu de l’objet dans le presse-papier [Plus d'informations].
L’objet TextRange peut être créé à partir du champ de formulaire grâce à la méthode createTextRange() [Plus d'informations].
La fonction de copie peut alors s’écrire comme ça :
Elle s’utilise donc de la manière suivante :
Firefox
Sur Firefox, la solution que j’ai trouvé est plus compliquée… Pour commencer, Firefox n’autorise pas, par défaut, Javascript à accéder au presse-papier. Une configuration est nécessaire de la part de l’utilisateur. Pour la marche à suivre, je vous conseille cette page.
Mozilla fournit un composant nommé @mozilla.org/widget/clipboardhelper;1 permettant de copier du texte dans le presse-papier (Mozilla fournit également d’autres composants, plus généraux qui permettent des actions plus étendues sur le presse-papier) [Plus d'informations].
Même si la configuration permettant l’accès au presse-papier a été correctement mise en place, une confirmation est demandée à l’utilisateur avant l’exécution de l’instruction.
La fonction peut alors s’écrire de la manière suivante :
Avec le code HTML associé :
Autres navigateurs
Malheureusement, je n’ai pas réussi à trouver de méthode équivalente sur les autres navigateurs. On peut, mais je n’ai pas testé, réaliser l’opération en Flash, à ce que j’ai lu, mais ça oblige l’utilisateur à avoir installé et activé Flash sur son navigateur. Bon, comme en plus je n’y connais rien en Flash, je n’ai pas creusé cette piste, ce sera peut-être pour une autre fois !
Dans mon cas, comme je devais copier une URL, j’ai opté pour la solution de mettre l’URL sur le lien de copie, ainsi, les utilisateur qui ne peuvent pas copier à l’aide du Javascript pourront copier le lien via le menu contextuel “Copier l’adresse du lien”, mais cette solution n’est pas toujours utilisable
Fonction générale de copie
Finalement, on peut s’en sortir assez bien avec une fonction de ce type, qui copiera sur IE, copiera sur Firefox si la configuration et l’utilisateur le permettent et affichera un message d’erreur sur les autres navigateur (le mieux étant bien sûr de le pas proposer ce lien de copie sur les navigateurs ne la permettant pas).
Pour tester, c’est par là !









)…