Lorsque vous survolez une carte dans Trello et appuyez sur Ctrl+ C, l'URL de cette carte est copiée dans le presse-papiers. comment font-ils ça?
Pour autant que je sache, aucun film Flash n'est impliqué. J'ai Flashblock installé et l'onglet réseau Firefox n'affiche aucun film Flash chargé. (C'est la méthode habituelle, par exemple, par ZeroClipboard.)
Comment parviennent-ils à cette magie?
(En ce moment, je pense que j'avais une révélation: vous ne pouvez pas sélectionner de texte sur la page, donc je suppose qu'ils ont un élément invisible, où ils créent une sélection de texte via le code JavaScript, et Ctrl+ Cdéclenche le comportement par défaut du navigateur, copiant cet invisible la valeur de texte du nœud.)
javascript
coffeescript
clipboard
trello
Boldewyn
la source
la source
Réponses:
Divulgation: j'ai écrit le code que Trello utilise ; le code ci-dessous est le code source réel que Trello utilise pour accomplir l'astuce du presse-papiers.
Nous n'accédons pas réellement au presse-papiers de l'utilisateur, mais nous aidons un peu l'utilisateur en sélectionnant quelque chose d'utile lorsqu'il appuie sur Ctrl+ C.
On dirait que vous l'avez compris; nous profitons du fait que lorsque vous voulez appuyer sur Ctrl+ C, vous devez d'abord appuyer sur la Ctrltouche. Lorsque la Ctrltouche est enfoncée, nous insérons une zone de texte qui contient le texte que nous voulons finir dans le presse-papiers, et sélectionnons tout le texte qu'il contient, de sorte que la sélection est entièrement définie lorsque la Ctouche est enfoncée. (Ensuite, nous masquons la zone de texte lorsque la Ctrlclé est levée)
Plus précisément, Trello fait ceci:
Dans le DOM, nous avons
CSS pour le presse-papiers:
... et le CSS fait en sorte que vous ne pouvez pas réellement voir la zone de texte quand elle apparaît ... mais elle est suffisamment "visible" pour copier.
Lorsque vous survolez une carte, elle appelle
... alors l'assistant presse-papiers sait quoi sélectionner lorsque la Ctrltouche est enfoncée.
la source
J'ai en fait construit une extension Chrome qui fait exactement cela, et pour toutes les pages Web. Le code source est sur GitHub .
Je trouve trois bugs avec l'approche de Trello, que je connais parce que je les ai rencontrés moi-même :)
La copie ne fonctionne pas dans ces scénarios:
J'ai résolu le problème n ° 1 en ayant toujours une plage cachée, plutôt que d'en créer une lorsque l'utilisateur frappe Ctrl/ Cmd.
J'ai résolu # 2 en effaçant temporairement la sélection de longueur nulle, en enregistrant la position du curseur, en faisant la copie et en restaurant la position du curseur.
Je n'ai pas encore trouvé de correctif pour # 3 :) (Pour plus d'informations, consultez le problème ouvert dans mon projet GitHub).
la source
Avec l'aide du code de raincoat ( lien vers GitHub ), j'ai réussi à obtenir une version en cours d'exécution accédant au presse-papiers avec JavaScript simple.
Le seul problème est que cette version ne fonctionne qu'avec Chrome. La plateforme Trello prend en charge tous les navigateurs. Qu'est-ce qui me manque?Sovled grâce à VadimIvanov.
Voir un exemple de travail: http://jsfiddle.net/AGEf7/
la source
el.innerText
n'était pas défini, j'ai donc changé la dernière ligne de laclipboard()
fonctionclip.setValue(el.innerText || el.textContent);
pour plus de compatibilité entre les navigateurs. lien: jsfiddle.net/AGEf7/31Le code de Daniel LeCheminant n'a pas fonctionné pour moi après l'avoir converti de CoffeeScript en JavaScript ( js2coffee ). Il a continué à bombarder la
_.defer()
ligne.J'ai supposé que c'était quelque chose à voir avec les reports jQuery, alors je l'ai changé
$.Deferred()
et ça fonctionne maintenant. Je l'ai testé dans Internet Explorer 11, Firefox 35 et Chrome 39 avec jQuery 2.1.1. L'utilisation est la même que celle décrite dans le post de Daniel.la source
Quelque chose de très similaire peut être vu sur http://goo.gl lorsque vous raccourcissez l'URL.
Il y a un élément d'entrée en lecture seule qui se concentre sur le programme, avec une info-bulle CTRL-Cpour copier.
Lorsque vous appuyez sur ce raccourci, le contenu d'entrée entre effectivement dans le presse-papiers. Vraiment sympa :)
la source