Редактирование данных буфера обмена при копировании / вставке с веб-сайта
Я видел несколько сайтов, где, если вы выделите текст статьи, скопируете его, а затем вставите, они могут добавить к нему больше текста.
Попробуйте скопировать и вставить часть текста из статьи на http://belfasttelegraph.co.uk/ и вы поймете, что я имею в виду - они добавляют ссылку на оригинальную статью в вставленном тексте.
Как это сделать? Я предполагаю, что здесь есть какой-то javascript
5 ответов
Это хороший эффект, вы можете увидеть сценарии, которые запускаются при копировании с использованием 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 изображения для изменения буфера обмена.
Вы заметите, что это происходит только в том случае, если вы используете комбинацию клавиш [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;