11545 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Bonjour,

Je tente de copier un lien vers le presse papier.

Voici le lien (généré en php) :
$titre_aff = '<dt id="'.$id.'"><a class="ancre" title="Lien vers cette fiche" href="#'.$id.'" onclick="copyToClipboard(\''.$_SERVER['REQUEST_URI'].'#'.$id.'\')">#</a> '.$titre.'</dt>';


Et voici ma fonction en fin de fichier :

function copyToClipboard(url) {
  window.clipboardData.setData("Text", url);
  alert("lien copié dans le presse-papiers");
  return false;
}


La console dans Firefox me dit la chose suivante :
Erreur : TypeError: window.clipboardData is undefined


Une idée de ce qui ne va pas ?

Merci
Modifié par jojaba (06 Jun 2013 - 19:21)
salut,
pour faire ça tu dois passer par la méthode execCommand(), qui te permet d'ailleurs beaucoup de choses. Cela dit tu ne pourras pas manipuler comme tu veux le presse-papier, question sécurité.
A part dans IE ou avec un plug-in (comme Flash) il n'est pas possible de copier des données dans le clipboard depuis un navigateur (pour des raisons de sécurité).
Modérateur
Voilà des réponses claires et précises.
On va donc faire dans la simplicité et demander à l'utilisateur de faire un clic-droit et de copier le lien.
Merci Smiley smile

PS : j'ai jamais utilisé execCommand() mais j'ai trouvé ça sur le Web (http://mya.edforum.net/?p=59), c'est vieux, mais j'ai pas voulu approfondir puisque je vais rester "simple" :
function copyToClipboardIE2(sElementId)
{
   // Récupération de l'objet représentant le champ de formulaire.
   var oElement = document.getElementById(sElementId);
   // Création du TextRange.
   var oRange = oElement.createTextRange();
   // Copie du contenu du champ dans le presse-papier.
   oRange.execCommand('Copy');
   // On ne veut pas suivre le lien après le clic.
   return false;
}

Juste par curiosité, comment adapter ça pour mon cas de lien (si tu as le temps de répondre Zelalsan) ?
Le textRange est en rapport avec une sélection de texte je pense et y'a des subtiles différences entre navigateurs. Normalement tu n'as qu'à appliquer la méthode à la variable texte de ton lien mais comme dit précédemment tu ne pourras pas vraiment faire ce que tu veux avec le presse papier. Déjà sur FF c'est complètement mort, cela dit l'utilisateur peut permettre l'accès au presse-papier mais tu te rendras vite compte de l'absurdité de la chose que de demander à l'utilisateur ça. En gros je crois qu'il n'y a que IE et Safari qui te permettent de manipuler le presse papier et ça reste assez fastidieux pour rien.
Modérateur
Zelalsan a écrit :
Le textRange est en rapport avec une sélection de texte je pense et y'a des subtiles différences entre navigateurs. Normalement tu n'as qu'à appliquer la méthode à la variable texte de ton lien mais comme dit précédemment tu ne pourras pas vraiment faire ce que tu veux avec le presse papier. Déjà sur FF c'est complètement mort, cela dit l'utilisateur peut permettre l'accès au presse-papier mais tu te rendras vite compte de l'absurdité de la chose que de demander à l'utilisateur ça. En gros je crois qu'il n'y a que IE et Safari qui te permettent de manipuler le presse papier et ça reste assez fastidieux pour rien.

Merci d'avoir confirmé que ça ne valait pas la peine d'approfondir le sujet Smiley cligne