Niektóre witryny internetowe korzystają teraz z usługi JavaScript firmy Tynt, która dołącza tekst do kopiowanej zawartości.
Jeśli skopiujesz tekst z witryny za pomocą tego, a następnie wkleisz, otrzymasz link do oryginalnej treści na dole tekstu.
Tynt również to śledzi. To zgrabna sztuczka, dobrze wykonana.
Ich skrypt robiący to imponujące - zamiast próbować manipulować schowkiem (co tylko starsze wersje IE pozwalają im to robić domyślnie i który zawsze powinien być wyłączony), manipulują rzeczywistym wyborem.
Kiedy więc zaznaczysz blok tekstu, dodatkowa zawartość zostanie dodana jako ukryta <div>
zawarta w Twoim zaznaczeniu. Po wklejeniu dodatkowy styl jest ignorowany i pojawia się dodatkowe łącze.
W rzeczywistości jest to dość łatwe do zrobienia w przypadku prostych bloków tekstu, ale jest to koszmar, gdy weźmie się pod uwagę wszystkie możliwe wybory w złożonym HTML w różnych przeglądarkach.
Tworzę aplikację internetową - nie chcę, aby ktokolwiek mógł śledzić kopiowane treści i chciałbym, aby dodatkowe informacje zawierały coś kontekstowego, a nie tylko łącze. W tym przypadku usługa Tynt nie jest odpowiednia.
Czy ktoś zna bibliotekę JavaScript typu open source (może wtyczkę jQuery lub podobną), która zapewnia podobną funkcjonalność, ale nie ujawnia wewnętrznych danych aplikacji?
źródło
Odpowiedzi:
Aktualizacja 2020
Rozwiązanie, które działa we wszystkich najnowszych przeglądarkach.
[Starszy post - przed aktualizacją 2020]
Istnieją dwa główne sposoby dodawania dodatkowych informacji do skopiowanego tekstu internetowego.
1. Manipulowanie wyborem
Chodzi o to, aby
copy event
wyszukać plik, a następnie dołączyć do niego ukryty pojemnik z naszymi dodatkowymi informacjamidom
i rozszerzyć na niego wybór.Ta metoda została zaadaptowana na podstawie tego artykułu przez c.bavota . Sprawdź też Jitbit „s wersji dla bardziej skomplikowanej sprawy.
2. Manipulowanie schowkiem
Chodzi o to, aby obserwować
copy event
i bezpośrednio modyfikować dane ze schowka. Jest to możliwe przy użyciuclipboardData
nieruchomości. Należy pamiętać, że ta właściwość jest dostępna we wszystkich głównych przeglądarkach wread-only
;setData
metoda jest dostępna tylko w IE.źródło
window.clipboardData
naevent.clipboardData
. IE (także v11) nie obsługujeevent.clipboardData
jsfiddle.net/m56af0je/8To jest zwykłe rozwiązanie javascript ze zmodyfikowanego rozwiązania powyżej, ale obsługuje więcej przeglądarek (metoda cross browser)
źródło
Najkrótsza wersja jQuery, którą przetestowałem i działa, to:
źródło
Oto wtyczka w jquery, która to robi https://github.com/niklasvh/jquery.plugin.clipboard Z pliku readme projektu "Ten skrypt modyfikuje zawartość zaznaczenia przed wywołaniem zdarzenia kopiowania, co powoduje skopiowanie zaznaczenia różni się od tego, co wybrał użytkownik.
Umożliwia to dołączanie / dodawanie treści do zaznaczenia, takich jak informacje o prawach autorskich lub inne treści.
Wydany na licencji MIT "
źródło
Poprawiając odpowiedź, przywróć zaznaczenie po zmianach, aby zapobiec przypadkowym selekcjom po skopiowaniu.
źródło
var range = selection.getRangeAt(0);
Ulepszenie na 2018 rok
źródło
var selection = window.getSelection();
na ten:var selection = getSelectionHtml();
Również trochę krótsze rozwiązanie:
źródło
To kompilacja 2 odpowiedzi powyżej + zgodność z Microsoft Edge.
Dodałem również przywrócenie oryginalnego zaznaczenia na końcu, tak jak jest to domyślnie oczekiwane w każdej przeglądarce.
źródło