Bouton copier dans le presse-papiers (JavaScript et React)

Bouton copier dans le presse-papiers

Bouton copier dans le presse-papiers en JavaScript et React | We.Inc

Créez un bouton copier avec navigator.clipboard.writeText : démo fonctionnelle, hook React, copie de HTML enrichi et d'images avec ClipboardItem, retour Copié accessible et gestion des erreurs.

Appelez navigator.clipboard.writeText(text) depuis un gestionnaire de clic. Il renvoie une promesse : attendez-la avec await, affichez ensuite un court message Copié et interceptez le cas d'erreur. L'API ne fonctionne qu'en HTTPS ou sur localhost, et elle exige une vraie action de l'utilisateur comme un clic : ne l'appelez donc pas au chargement de la page.

Façons de placer des données dans le presse-papiers

Un bouton copier paraît trivial, pourtant les extraits bien classés oublient souvent ce qui pose problème : la promesse peut être rejetée, les cadres intégrés peuvent être bloqués, et les utilisateurs de lecteurs d'écran n'entendent jamais que quelque chose s'est passé. La démo ci-dessous copie réellement dans votre navigateur, et le code couvre chacun de ces cas.

Questions fréquentes

Pourquoi navigator.clipboard vaut-il undefined ?

La page n'est pas dans un contexte sécurisé. L'API Clipboard n'est exposée que sur les pages HTTPS et sur localhost : un site servi en HTTP simple ou depuis une adresse du réseau local ne l'aura pas.

Pourquoi writeText lève-t-il NotAllowedError ?

Le navigateur a refusé l'écriture, généralement parce qu'il n'y a pas eu d'action récente de l'utilisateur, que la page n'avait pas le focus ou qu'un cadre était bloqué par la Permissions Policy. Appelez-le directement dans un gestionnaire de clic et évitez les longs await avant.

Faut-il une bibliothèque pour copier dans le presse-papiers avec React ?

Non. Un hook de dix lignes autour de navigator.clipboard.writeText suffit. Les bibliothèques ajoutent surtout une solution de repli execCommand pour de très vieux navigateurs, dont les navigateurs actuels n'ont pas besoin.

Peut-on copier une image dans le presse-papiers ?

Oui, avec navigator.clipboard.write et un ClipboardItem dont la clé est image/png et la valeur un Blob PNG. Utilisez d'abord ClipboardItem.supports() pour vérifier un type ; le PNG est le format que les navigateurs acceptent le plus sûrement.

document.execCommand('copy') est-il encore acceptable ?

Il est obsolète. Il fonctionne encore dans de nombreux navigateurs, selon des conditions variables, mais le nouveau code doit utiliser l'API Clipboard asynchrone, avec comme solution de repli une demande de copie manuelle.

Les trois règles imposées par le navigateur

Un retour que chacun peut percevoir

Copies enrichies et événements copy personnalisés

JavaScript pur

Bouton copier avec retour et solution de repli

L'élément de statut est masqué visuellement mais lu à voix haute. En cas d'échec, le texte est sélectionné pour que la personne puisse appuyer sur Ctrl+C ou Cmd+C.

Hook React

useCopyToClipboard

Renvoie l'état et une fonction de copie. Le minuteur est annulé au démontage, il ne met donc jamais à jour un composant supprimé.

Texte enrichi, images et événement copy

Copier du HTML avec une version texte brut de repli

Chaque type MIME est un Blob. Les cibles du collage choisissent le format le plus riche qu'elles comprennent.

Ajouter une ligne de source aux copies normales

À utiliser avec modération. Modifier ce que les gens copient peut les agacer : réservez-le aux citations ou au code, où une source est utile.

Erreurs et leurs causes

Quand la copie échoue

Copié

Échec

Copier

Copier le texte enrichi

Copié dans le presse-papiers

La copie a échoué. Sélectionnez le texte et appuyez sur Ctrl+C ou Cmd+C.

Essayez

Des boutons copier pour du texte brut et du HTML enrichi, avec une zone de collage pour vérifier le résultat.

Texte à copier

Invitation :

rejoindre l'équipe

Collez ici pour vérifier (Ctrl+V ou Cmd+V)

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site