navigator.clipboard.readText() no funciona en Firefox

3 minutos de lectura

Avatar de usuario de Nima Keshavarzian
Nima Keshavarzian

Tengo este código para pegar:

navigator.clipboard.readText().then(
  clipText => document.querySelector("#Note").innerText += clipText);

Pero tiene este error:

TypeError no detectado: navigator.clipboard.readText no es una función

ayúdame a resolver este error

  • Funciona bien cuando lo pruebo, debe haber algo en su código que esté causando esto.

    – ProEvilz

    7 mayo 2021 a las 18:42

  • No funcionó cuando lo probé en Stackoverflow

    – Nima Keshavarzian

    7 mayo 2021 a las 18:46

  • Lo hice en codepen, definitivamente funciona. Debe asegurarse de estar enfocado en el documento, por ejemplo, la página en blanco.

    – ProEvilz

    7 mayo 2021 a las 19:05


  • Lo probé con console.log pero no funcionó

    – Nima Keshavarzian

    7 mayo 2021 a las 19:19

  • use esto para detectar soporte en su navegador, typeof navigator.clipboard.readText !== "undefined"

    – David Clews

    13 de marzo a las 12:01

Supongo que lo estás probando en Firefox, en ese caso:

Firefox solo admite la lectura del portapapeles en las extensiones del navegador, utilizando el permiso de extensión “clipboardRead”.

https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText#browser_compatibility

La lectura del portapapeles en Firefox (versión 94, noviembre de 2021) no parece funcionar y arroja un error:

var promise = navigator.clipboard.readText();

// Uncaught TypeError: navigator.clipboard.readText is not a function

La documentación en MDN Web Docs sugiere otorgar permisos a través de la API de permisos:

Se debe otorgar el permiso de “lectura del portapapeles” de la API de permisos antes de poder leer datos del portapapeles.

Pero clipboard-read no parece ser compatible:

navigator.permissions.query({ name: "clipboard-read" });

// Uncaught TypeError: 'clipboard-read' is not a valid value for enumeration PermissionName.

La única forma de habilitar la lectura (y escritura) del portapapeles es habilitar dom.events.testing.asyncClipboard en el cliente de Firefox:

  1. Ingresar about:config en la barra de navegación
  2. Haga clic en “Aceptar el riesgo y continuar”
  3. Buscar dom.events.testing.asyncClipboard y establecer true

  • ¿Cómo puede probar esto y aconsejar al usuario?

    – WinEunuuchs2Unix

    19 de octubre de 2022 a las 2:26

  • también tuve que poner dom.events.asyncClipboard.readText a cierto en mi caso.

    – Beto

    11 de marzo a las 20:40

A pesar de navigator.clipboard.readText() no es compatible con Firefox, me siento obligado a señalar que PUEDE copiar algo en el portapapeles con Firefox utilizando un enfoque diferente que no requiere que esté habilitado expresamente:

const copy = document.getElementById('copy');
const copy2 = document.getElementById('copy2');
const copyIt = document.getElementById('copyIt');

const copyToClipboard = (str) => {
  if (navigator 
      && navigator.clipboard 
      && navigator.clipboard.writeText)
    return navigator.clipboard.writeText(str);
    return Promise.reject("The Clipboard API is not available.");
};

copyIt.addEventListener('click', function() {
  copyToClipboard(copy.value);
  copy2.focus();
  copyIt.innerText = "Now right-click & paste into textarea above.";
});
  <textarea name="copy" id="copy" cols="30" rows="10" style="width:90vw;height:25px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad quos, quae a dicta. Quibusdam autem debitis beatae laboriosam nemo illo aliquid. Itaque, doloremque, dicta. Culpa officiis illo cum quisquam rem.</textarea>
<textarea name="copy2" id="copy2" cols="30" rows="10" style="width:90vw;height:25px;"></textarea>
<br><button id="copyIt">Copy It</button>

Solo quería que cualquiera que tuviera los mismos problemas con Firefox que el OP supiera que era posible hacer…

  • la pregunta era sobre lectura el contenido del portapapeles, que no funciona en Firefox, mientras que su ejemplo describe escribir contenido para el portapapeles, que hace trabajar en firefox. Por ejemplo, no puede copiar algo de otro lugar y luego mostrar el contenido del portapapeles en su página. (Gracias por el ejemplo de todos modos.)

    – kca

    17 de febrero a las 9:39

¿Ha sido útil esta solución?