Некоторые веб-сайты теперь используют службу JavaScript от Tynt, которая добавляет текст к скопированному содержимому.
Если вы скопируете текст с сайта, используя это, а затем вставите, вы получите ссылку на исходный контент внизу текста.
Тынт также отслеживает, как это происходит. Это отличный трюк.
Их сценарий для этого впечатляет - вместо того, чтобы пытаться манипулировать буфером обмена (что позволяет им делать только старые версии IE по умолчанию и который всегда следует выключать), они манипулируют фактическим выделением.
Поэтому, когда вы выбираете блок текста, дополнительный контент добавляется как скрытый, <div>
включенный в ваш выбор. При вставке лишний стиль игнорируется и появляется дополнительная ссылка.
На самом деле это довольно легко сделать с простыми блоками текста, но это кошмар, если учесть все возможные варианты выбора в сложном HTML в разных браузерах.
Я разрабатываю веб-приложение - я не хочу, чтобы кто-либо мог отслеживать скопированный контент, и я хотел бы, чтобы дополнительная информация содержала что-то контекстное, а не просто ссылку. В этом случае услуга Tynt не совсем подходит.
Кто-нибудь знает библиотеку JavaScript с открытым исходным кодом (возможно, плагин jQuery или аналогичный), которая предоставляет аналогичные функции, но не раскрывает внутренние данные приложения?
Ответы:
Обновление 2020
Решение, которое работает во всех последних браузерах.
[Предыдущее сообщение - до обновления 2020]
Есть два основных способа добавить дополнительную информацию к скопированному веб-тексту.
1. Манипулирование выделением
Идея состоит в том, чтобы следить за
copy event
объектом, затем добавить в него скрытый контейнер с нашей дополнительной информациейdom
и расширить выбор до него.Этот метод адаптирован из этой статьи по c.bavota . Также проверьте версию jitbit для более сложного случая.
2. Работа с буфером обмена
Идея состоит в том, чтобы наблюдать
copy event
и напрямую изменять данные буфера обмена. Это возможно с помощьюclipboardData
собственности. Обратите внимание, что это свойство доступно во всех основных браузерах вread-only
;setData
метод доступен только в IE.источник
window.clipboardData
наevent.clipboardData
. IE (тоже v11) не поддерживаетevent.clipboardData
jsfiddle.net/m56af0je/8Это ванильное решение javascript из модифицированного решения выше, но поддерживает больше браузеров (кроссбраузерный метод)
источник
Самая короткая версия jQuery, которую я тестировал и сейчас работает:
источник
Вот плагин в jquery для этого https://github.com/niklasvh/jquery.plugin.clipboard Из файла readme проекта "Этот скрипт изменяет содержимое выделенного фрагмента до вызова события копирования, что приводит к скопированному выделению. отличается от того, что выбрал пользователь.
Это позволяет вам добавлять / добавлять контент к выбору, например информацию об авторских правах или другой контент.
Выпущено по лицензии MIT "
источник
Улучшая ответ, восстановите выбор после изменений, чтобы предотвратить случайный выбор после копирования.
источник
var range = selection.getRangeAt(0);
Улучшение на 2018 год
источник
var selection = window.getSelection();
на эту:var selection = getSelectionHtml();
Также немного более короткое решение:
источник
Это сборник из 2 ответов выше + совместимость с Microsoft Edge.
Я также добавил восстановление исходного выделения в конце, как это ожидается по умолчанию в любом браузере.
источник