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

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

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

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

Ответ 1

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

Запустите Firebug и загрузите страницу, выберите clear (потому что на странице используется много 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 и изображение.

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 5

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

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;