Przycisk kopiowania do schowka (JavaScript i React)

Przycisk kopiowania do schowka

Przycisk kopiowania do schowka w JavaScript i React | We.Inc

Zbuduj przycisk kopiowania z navigator.clipboard.writeText: działające demo, hook React, kopiowanie sformatowanego HTML i obrazów przez ClipboardItem, dostępny komunikat Skopiowano i obsługa błędów.

Wywołaj navigator.clipboard.writeText(text) z handlera kliknięcia. Zwraca obietnicę, więc użyj await, potem pokaż krótki komunikat Skopiowano i obsłuż przypadek błędu. API działa tylko na HTTPS lub localhost i wymaga prawdziwej akcji użytkownika, np. kliknięcia, więc nie wywołuj go przy ładowaniu strony.

Sposoby umieszczania danych w schowku

Przycisk kopiowania wygląda banalnie, a jednak fragmenty kodu wysoko w wynikach często pomijają to, co się psuje: obietnica może zostać odrzucona, osadzone ramki mogą być zablokowane, a użytkownicy czytników ekranu nigdy nie usłyszą, że coś się stało. Demo poniżej naprawdę kopiuje w Twojej przeglądarce, a kod obejmuje każdy z tych przypadków.

Najczęściej zadawane pytania

Dlaczego navigator.clipboard jest undefined?

Strona nie działa w bezpiecznym kontekście. Clipboard API jest dostępne tylko na stronach HTTPS i na localhost, więc strona serwowana przez zwykłe HTTP lub z adresu w sieci lokalnej go nie ma.

Dlaczego writeText rzuca NotAllowedError?

Przeglądarka odmówiła zapisu, zwykle dlatego, że nie było niedawnej akcji użytkownika, strona nie miała fokusu albo ramka została zablokowana przez Permissions Policy. Wywołaj go bezpośrednio w handlerze kliknięcia i unikaj długich await przed nim.

Czy potrzebuję biblioteki do kopiowania do schowka w React?

Nie. Wystarczy dziesięciolinijkowy hook wokół navigator.clipboard.writeText. Biblioteki głównie dodają rozwiązanie awaryjne z execCommand dla bardzo starych przeglądarek, którego obecne przeglądarki nie potrzebują.

Czy mogę skopiować obraz do schowka?

Tak, przez navigator.clipboard.write i ClipboardItem, którego kluczem jest image/png, a wartością Blob PNG. Użyj ClipboardItem.supports(), aby najpierw sprawdzić typ: PNG to format, który przeglądarki akceptują najpewniej.

Czy document.execCommand('copy') jest nadal w porządku?

Jest przestarzałe. Nadal działa w wielu przeglądarkach w różnych warunkach, ale nowy kod powinien używać asynchronicznego Clipboard API, a w razie niepowodzenia prosić osobę o ręczne skopiowanie.

Trzy zasady, które egzekwuje przeglądarka

Informacja zwrotna, którą ludzie zauważą

Kopiowanie sformatowane i własne zdarzenia copy

Czysty JavaScript

Przycisk kopiowania z informacją zwrotną i rozwiązaniem awaryjnym

Element statusu jest wizualnie ukryty, ale odczytywany na głos. Przy niepowodzeniu tekst zostaje zaznaczony, aby osoba mogła nacisnąć Ctrl+C lub Cmd+C.

Hook React

useCopyToClipboard

Zwraca stan i funkcję kopiowania. Timer jest czyszczony przy odmontowaniu, więc nigdy nie aktualizuje usuniętego komponentu.

Sformatowany tekst, obrazy i zdarzenie copy

Kopiowanie HTML z wersją awaryjną w zwykłym tekście

Każdy typ MIME to Blob. Miejsca wklejenia wybierają najbogatszy format, który rozumieją.

Dodanie linii ze źródłem do zwykłego kopiowania

Używaj oszczędnie. Zmiana tego, co ludzie kopiują, może ich irytować, więc ogranicz to do cytatów lub kodu, gdzie źródło pomaga.

Błędy i ich przyczyny

Gdy kopiowanie się nie udaje

Skopiowano

Błąd

Kopiuj

Kopiuj sformatowany tekst

Skopiowano do schowka

Kopiowanie nie powiodło się. Zaznacz tekst i naciśnij Ctrl+C lub Cmd+C.

Wypróbuj

Przyciski kopiowania zwykłego tekstu i sformatowanego HTML z polem do wklejenia, aby sprawdzić wynik.

Tekst do skopiowania

Zaproszenie:

dołącz do zespołu

Wklej tutaj, aby sprawdzić (Ctrl+V lub Cmd+V)

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony