Po najechaniu myszką na kartę w Trello i naciśnięciu Ctrl+ Cadres URL tej karty jest kopiowany do schowka. Jak oni to robią?
O ile mi wiadomo, nie ma w tym filmu Flash. Mam zainstalowany Flashblock , a karta sieciowa Firefox pokazuje brak załadowanego filmu Flash. (Jest to zwykle stosowana metoda, na przykład przez ZeroClipboard.)
Jak osiągają tę magię?
(W tej chwili myślę, że miałem objawienie: Nie możesz zaznaczyć tekstu na stronie, więc zakładam, że mają niewidoczny element, w którym tworzą zaznaczenie tekstu za pomocą kodu JavaScript i Ctrl+ Cwyzwalają domyślne zachowanie przeglądarki, kopiując to niewidoczne wartość tekstowa węzła).
javascript
coffeescript
clipboard
trello
Boldewyn
źródło
źródło
Odpowiedzi:
Ujawnienie: Napisałem kod, którego używa Trello ; poniższy kod to rzeczywisty kod źródłowy, którego Trello używa do wykonania sztuczki ze schowka.
W rzeczywistości nie „uzyskujemy dostępu do schowka użytkownika”, zamiast tego pomagamy użytkownikowi, wybierając coś przydatnego po naciśnięciu Ctrl+ C.
Wygląda na to, że to rozgryzłeś; wykorzystujemy fakt, że jeśli chcesz nacisnąć Ctrl+ C, najpierw musisz nacisnąć Ctrlklawisz. Po Ctrlnaciśnięciu klawisza wchodzimy do obszaru tekstowego, który zawiera tekst, który chcemy skończyć w schowku, i zaznaczamy w nim cały tekst, więc wybór jest ustawiany po Cnaciśnięciu klawisza. (Następnie ukrywamy obszar tekstowy, gdy Ctrlpojawi się klucz)
W szczególności Trello robi to:
W DOM mamy
CSS dla schowka:
... a CSS sprawia, że nie można zobaczyć obszaru tekstowego, kiedy się pojawia ... ale jest "wystarczająco widoczny", aby skopiować.
Gdy najedziesz kursorem na kartę, zadzwoni
... więc pomocnik schowka wie, co wybrać po Ctrlnaciśnięciu klawisza.
źródło
Zbudowałem rozszerzenie Chrome, które właśnie to robi, i dla wszystkich stron internetowych. Kod źródłowy znajduje się na GitHub .
Znalazłem trzy błędy w podejściu Trello, które znam, bo sam sobie z nimi poradziłem :)
Kopiowanie nie działa w tych scenariuszach:
Rozwiązałem # 1, zawsze mając ukryty zakres, zamiast tworzyć go, gdy użytkownik kliknie Ctrl/ Cmd.
Rozwiązałem # 2, tymczasowo usuwając zaznaczenie zerowej długości, zapisując pozycję karetki, wykonując kopię i przywracając pozycję karetki.
Nie znalazłem jeszcze poprawki dla nr 3 :) (Aby uzyskać informacje, sprawdź otwarty problem w moim projekcie GitHub).
źródło
Za pomocą kodu płaszcza przeciwdeszczowego ( link do GitHub ) udało mi się uzyskać dostęp do działającej wersji dostępnej do schowka za pomocą zwykłego JavaScript.
Jedynym problemem jest to, że ta wersja działa tylko z Chrome. Platforma Trello obsługuje wszystkie przeglądarki. Czego mi brakuje?Wysłany dzięki VadimIvanov.
Zobacz działający przykład: http://jsfiddle.net/AGEf7/
źródło
el.innerText
było niezdefiniowane, więc zmieniłem ostatni wierszclipboard()
funkcji naclip.setValue(el.innerText || el.textContent);
dla większej kompatybilności z różnymi przeglądarkami. link: jsfiddle.net/AGEf7/31Kod Daniela LeCheminanta nie działał dla mnie po konwersji z CoffeeScript na JavaScript ( js2coffee ). Nadal bombardował
_.defer()
linię.Założyłem, że ma to coś wspólnego z odroczeniem jQuery, więc zmieniłem go na
$.Deferred()
i działa teraz. Przetestowałem to w Internet Explorerze 11, Firefox 35 i Chrome 39 z jQuery 2.1.1. Użycie jest takie samo, jak opisano w poście Daniela.źródło
Coś bardzo podobnego można zobaczyć na http://goo.gl po skróceniu adresu URL.
Istnieje element wejściowy tylko do odczytu, który jest programowo skoncentrowany, z naciśnięciem podpowiedzi CTRL-Cdo kopiowania.
Po naciśnięciu tego skrótu treść wejściowa skutecznie trafia do schowka. Bardzo miłe :)
źródło