Редактирование данных буфера обмена при копировании / вставке с веб-сайта

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

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

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

5 ответов


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

запустите Firebug и загрузите страницу, выберите clear (поскольку страница использует много ajax, очень быстро 100 запросов). Затем выберите вкладку " Все " и попробуйте скопировать. Вы увидите запрос на 1x1 пиксельное изображение, но если вы нажмете на кнопку+, чтобы посмотреть на детали, вы увидите на вкладке "params", что этот запрос GET передает запрошенный текст как "содержимое" параметр, с некоторой информацией 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 изображения для изменения буфера обмена.


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

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

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


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


другим решением, используемым другими веб-сайтами, является использование 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/


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

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;