navigator.clipboard

Accès asynchrone au presse-papiers système. La méthode writeText() copie du texte, et readText() le lit depuis le presse-papiers.

Renvoie
Une promesse. Pour writeText() et write(), elle se résout avec undefined, pour readText() avec la chaîne du presse-papiers, et pour read() avec un tableau d’objets ClipboardItem.
Sur cette page

Exemple

#
JavaScript
const copyButton = document.querySelector('#copy')
const snippet = document.querySelector('#snippet')

copyButton.addEventListener('click', async () => {
  try {
    await navigator.clipboard.writeText(snippet.textContent)
    copyButton.textContent = 'Copié !'
    console.log('Copié :', snippet.textContent)
  } catch (error) {
    console.log('Échec de la copie :', error.name)
  }
})
Résultat
Copié : console.log('Bienvenue dans CodeWorlds !')

Le navigateur bloque le presse-papiers dans le cadre isolé où s’exécutent les exemples de cette page, donc le code ne s’exécute pas dans l’aperçu. Sur une page normale avec un bloc de code #snippet, un clic sur le bouton copie son contenu, et la console affiche le résultat ci-dessus.

Définition et utilisation

#

navigator.clipboard est un objet pour travailler avec le presse-papiers système. Vous utiliserez le plus souvent la méthode writeText(texte), qui copie une chaîne dans le presse-papiers, par exemple après un clic sur un bouton « Copier le code ». La méthode readText() lit le texte du presse-papiers, et write() et read() gèrent aussi d’autres données, par exemple des images, enveloppées dans des objets ClipboardItem.

Toutes les méthodes sont asynchrones et renvoient des promesses, donc utilisez-les avec await ou then(). La promesse est rejetée quand le navigateur n’autorise pas l’opération, donc gérez toujours les erreurs, par exemple avec un bloc try...catch.

Le presse-papiers ne fonctionne que sur les pages ouvertes en HTTPS (ou depuis localhost), et les navigateurs le protègent contre les abus. L’écriture exige que la page soit active, et dans certains navigateurs aussi que le code s’exécute en réaction à une action de l’utilisateur, par exemple un clic. La lecture est protégée plus strictement : le navigateur peut demander une autorisation ou afficher un bouton « Coller ». Dans les cadres iframe, la page parente doit en plus autoriser l’accès.

La méthode writeText() fonctionne dans tous les grands navigateurs depuis des années. readText(), read(), write() et les objets ClipboardItem ne sont disponibles partout que depuis 2024, donc il vaut la peine de vérifier leur existence avant de les utiliser.

Syntaxe

#
Syntaxe
navigator.clipboard.writeText(text)
navigator.clipboard.readText()
navigator.clipboard.write(items)
navigator.clipboard.read()

Paramètres

#
  • text

    chaîne

    Le texte à copier, dans writeText().
  • items

    tableau de ClipboardItem

    Les données à enregistrer dans write(), par exemple une image ou du texte sous plusieurs formats.

Plus d’exemples

#
Coller un lien depuis le presse-papiers
JavaScript
document.querySelector('#paste').addEventListener('click', async () => {
  try {
    const text = await navigator.clipboard.readText()
    document.querySelector('#project-link').value = text.trim()
    console.log('Collé :', text.trim())
  } catch (error) {
    console.log('Pas d’accès au presse-papiers :', error.name)
  }
})
Résultat
Collé : https://github.com/lea/calculatrice

Lors de la lecture, le navigateur peut demander une autorisation ou afficher un bouton « Coller ». Si l’utilisateur refuse, la promesse est rejetée avec une erreur NotAllowedError, et le bloc catch s’exécute.

Vérifier si le presse-papiers est disponible
JavaScript
async function copyText(text) {
  if (!navigator.clipboard) return 'Presse-papiers indisponible, copiez le texte à la main'

  try {
    await navigator.clipboard.writeText(text)
    return 'Copié dans le presse-papiers'
  } catch (error) {
    return `Pas d’autorisation d’écriture : ${error.name}`
  }
}

document.querySelector('#coupon').addEventListener('click', async () => {
  console.log(await copyText('COURS-20'))
})
Résultat
Copié dans le presse-papiers

Le résultat apparaît après un clic sur le bouton, sur une page ouverte en HTTPS. Sur une page ouverte en HTTP classique, l’objet navigator.clipboard n’existe pas, et la fonction renvoie le premier message.

Compatibilité des navigateurs

#

Nouveau dans les navigateurs · depuis 2024

Fonctionne dans les versions actuelles de tous les grands navigateurs. Les anciennes versions peuvent ne pas le prendre en charge.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Appelez writeText() depuis un gestionnaire de clic. Certains navigateurs bloquent la copie sans action de l’utilisateur.
  • Gérez toujours une promesse rejetée et indiquez si la copie a réussi, par exemple en changeant le texte du bouton en « Copié ! ».
  • Sur les pages sans HTTPS, navigator.clipboard n’existe pas. Vérifiez-le avant de l’utiliser, par exemple avec navigator.clipboard?.writeText.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.