Редактирование данных буфера обмена при копировании / вставке с веб-сайта - PullRequest
14 голосов
/ 08 марта 2010

Я видел несколько сайтов, где, если вы выделите текст статьи, скопируйте его, а затем вставите, они могут добавить к нему больше текста.

Попробуйте скопировать и вставить часть текста изстатья на http://belfasttelegraph.co.uk/, и вы поймете, что я имею в виду - они добавляют ссылку на оригинальную статью в вставленном тексте.

Как это сделать?Я предполагаю, что здесь есть какой-то javascript

Ответы [ 5 ]

8 голосов
/ 08 марта 2010

Это хороший эффект, вы можете видеть сценарии, которые запускаются при копировании с использованием Firebug (в Firefox).

Запустите Firebug и загрузите страницу, выберите очистить (поскольку страница использует много Ajax, очень быстро выполняется 100 запросов). Затем выберите вкладку «Все» и попробуйте скопировать. Вы увидите запрос на изображение размером 1x1 пиксель, но если вы нажмете кнопку +, чтобы посмотреть детали, вы увидите на вкладке «params», что этот запрос GET передает ваш запрошенный текст в качестве параметра «content», с некоторыми Информация xpath, которая будет использоваться для манипулирования DOM буфера обмена:

start_node_xpath    /HTML/BODY[@id='belfast']/DIV[@id='root']/DIV[@id='content']/DIV[@id='mainColumn']/DIV[@id='article']/DIV[5]/P[39]/text()

end_node_xpath  /HTML/BODY[@id='belfast']/DIV[@id='root']/DIV[@id='content']/DIV[@id='mainColumn']/DIV[@id='article']/DIV[5]/P[41]/text()

Как отметил @Crimson, существуют методы для работы с буфером обмена, , такие как zeroclipboard , которые используют Flash и изображение.

Я считаю, что именно так и делается, используя запрос get изображения для изменения буфера обмена.

3 голосов
/ 08 марта 2010

Вы заметите, что это происходит только при использовании комбинации клавиш [Ctrl + C], а не при выделении текста и выборе копирования в меню, вызываемом правой кнопкой мыши.

Они просто перехватывают нажатие клавиши [Ctrl + C].

Далее, чтобы добавить данные в буфер обмена, взгляните на этот пост: Как скопировать в буфер обмена в JavaScript?

1 голос
/ 23 марта 2015

Другое решение, используемое на других веб-сайтах, заключается в использовании jQuery и события 'copy' / 'cut':

$('body').bind('copy cut',function(e){manipulate();});

Некоторые примеры здесь: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/

1 голос
/ 28 июня 2012

Я недавно заметил приток этого «захвата буфера обмена» на веб-сайты. thefutoncritic.com, cracked.com ... Если вы используете Adblock, просто перейдите в список «ручных записей» и добавьте к нему * post-copypaste.js *. Это должно помешать сайтам добавлять свои объявления в буфер обмена.

0 голосов
/ 17 апреля 2016

Новостной сайт, который я посещаю, использует эту функцию, чтобы добавить «источник» к скопированному выбору:

function addLink() {
    var body_element = document.getElementsByTagName('body')[0];
    var selection;
    selection = window.getSelection();
    // change this if you want
    var pagelink = "<br><br>Fuente: Emol.com - <a href='"+document.location.href+"'>"+document.location.href+"</a><br>";
    var copytext = selection + pagelink;
    var newdiv = document.createElement('div');
    newdiv.style.position='absolute';
    newdiv.style.left='-99999px';
    body_element.appendChild(newdiv);
    newdiv.innerHTML = copytext;
    selection.selectAllChildren(newdiv);
    window.setTimeout(function() {
        body_element.removeChild(newdiv);
    },0);
}
document.oncopy = addLink;
...