Cuando pasa el cursor sobre una tarjeta en Trello y presiona Ctrl+ C, la URL de esta tarjeta se copia en el portapapeles. ¿Cómo lo hacen?
Por lo que puedo decir, no hay una película Flash involucrada. Tengo instalado Flashblock , y la pestaña de red de Firefox no muestra ninguna película Flash cargada. (Ese es el método habitual, por ejemplo, con ZeroClipboard).
¿Cómo logran esta magia?
(Justo en este momento creo que tuve una epifanía: no puede seleccionar texto en la página, por lo que supongo que tienen un elemento invisible, donde crean una selección de texto a través del código JavaScript y Ctrl+ Cactiva el comportamiento predeterminado del navegador, copiando ese invisible valor de texto del nodo).
javascript
coffeescript
clipboard
trello
Boldewyn
fuente
fuente
Respuestas:
Divulgación: escribí el código que usa Trello ; El siguiente código es el código fuente real que Trello usa para lograr el truco del portapapeles.
En realidad, no "accedemos al portapapeles del usuario", sino que ayudamos al usuario un poco seleccionando algo útil cuando presionan Ctrl+ C.
Parece que lo has descubierto; aprovechamos el hecho de que cuando quieres presionar Ctrl+ C, Ctrlprimero debes presionar la tecla. Cuando Ctrlse presiona la tecla, introducimos un área de texto que contiene el texto que queremos terminar en el portapapeles y seleccionamos todo el texto que contiene, de modo que la selección se establece cuando se Cpresiona la tecla. (Luego ocultamos el área de texto cuando Ctrlaparece la clave)
Específicamente, Trello hace esto:
En el DOM tenemos
CSS para el material del portapapeles:
... y el CSS hace que no se pueda ver el área de texto cuando aparece ... pero es lo suficientemente "visible" para copiar.
Cuando pasas el mouse sobre una tarjeta, llama
... entonces el ayudante del portapapeles sabe qué seleccionar cuando Ctrlse presiona la tecla.
fuente
Realmente construí una extensión de Chrome que hace exactamente esto, y para todas las páginas web. El código fuente está en GitHub .
Encuentro tres errores con el enfoque de Trello, que sé porque los he enfrentado yo mismo :)
La copia no funciona en estos escenarios:
Resolví el # 1 al tener siempre un lapso oculto, en lugar de crear uno cuando el usuario golpea Ctrl/ Cmd.
Resolví el n. ° 2 borrando temporalmente la selección de longitud cero, guardando la posición de intercalación, haciendo la copia y restaurando la posición de intercalación.
Todavía no he encontrado una solución para el # 3 :) (Para obtener información, consulte el problema abierto en mi proyecto GitHub).
fuente
Con la ayuda del código del impermeable ( enlace a GitHub ), logré obtener una versión en ejecución accediendo al portapapeles con JavaScript simple.
El único problema es que esta versión solo funciona con Chrome. La plataforma Trello es compatible con todos los navegadores. ¿Qué me estoy perdiendo?Sovled gracias a VadimIvanov.
Vea un ejemplo de trabajo: http://jsfiddle.net/AGEf7/
fuente
el.innerText
no estaba definido, así que cambié la última línea de laclipboard()
función paraclip.setValue(el.innerText || el.textContent);
obtener una mayor compatibilidad entre navegadores. enlace: jsfiddle.net/AGEf7/31El código de Daniel LeCheminant no funcionó para mí después de convertirlo de CoffeeScript a JavaScript ( js2coffee ). Siguió bombardeando en la
_.defer()
línea.Asumí que esto tenía algo que ver con los aplazamientos de jQuery, así que lo cambié
$.Deferred()
y está funcionando ahora. Lo probé en Internet Explorer 11, Firefox 35 y Chrome 39 con jQuery 2.1.1. El uso es el mismo que se describe en la publicación de Daniel.fuente
Algo muy similar se puede ver en http://goo.gl cuando acorta la URL.
Hay un elemento de entrada de solo lectura que se enfoca programáticamente, con información sobre herramientas CTRL-Cpara copiar.
Cuando tocas ese atajo, el contenido de entrada entra efectivamente en el portapapeles. Muy agradable :)
fuente