Estoy trabajando en un generador de contraseñas que genera contraseñas aleatorias y se muestra dentro de un elemento <p> . Esa parte funciona bien.
Quiero copiar el valor de salida (contraseña generada) en el elemento <p> al portapapeles cuando el usuario hace clic en el valor de la contraseña en <p>
Aquí está mi código:
function copyPassword() { let password = document.getElementById("pwd").innerText let message = document.getElementById("msg") //This doesn't seem to work navigator.clipboard.writeText(password) //This works message.innerText = "Copied to clipboard" } <p id="pwd" onclick="copyPassword()">click me</p> <p id="msg"></p>ACTUALIZACIÓN: Acabo de comprobar en Firefox; este código parece funcionar perfectamente. Pero no lo hace en Chrome, Edge y Safari. 🤪
ACTUALIZACIÓN 2: Cargué los archivos en un repositorio de GitHub y los publiqué. Funciona bien. Así que no hay problemas con el código.
writeText es una función asíncrona, debe usar then para obtener el resultado.Y Chrome tiene algunas limitaciones, puede ver un mensaje de error si falla.
function copyPassword() { let password = document.getElementById("pwd").innerText( let message = document.getElementById("msg")); //This doesn't seem to work navigator.clipboard.writeText(password) .then(() => { //This works; message.innerText = "Copied to clipboard" }) .catch((err) => { message.innerText = err.message }) } <span id="pwd" onclick="copyPassword()">click me</span> <span id="msg">Respuesta</span>