从网站复制/粘贴时编辑剪贴板数据

14

我现在看到了几个网站,如果你选中一篇文章的文本、复制,然后粘贴到该网站中,它们就会在你复制的文本中添加更多的文本。

试着从 http://belfasttelegraph.co.uk/ 的一篇文章中复制并粘贴一段文字,你就能看到我的意思 - 它们在粘贴的文本中添加了一个指向原文章的链接。

这是如何实现的?我猜测这里涉及到一些 JavaScript 脚本。


1
有趣啊。我一直在费尽周折地想办法防止任何网站做这件事。请谨慎使用。 - user657199
5个回答

8

这是一个很好的效果,您可以使用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 和一个图像。

我认为这就是通过使用图像获取请求来更改剪贴板的技术所做的。


3
您会注意到,这只发生在您使用键盘组合[Ctrl+C]时,而不是如果您突出显示文本并从右键菜单中选择复制。

他们只是捕获了[Ctrl+C]按键。

此外,要将数据添加到剪贴板,请查看此帖子: 如何在JavaScript中复制到剪贴板?


不同意。我使用XP / Firefox 3.5.8,如果我选择并右键单击然后选择复制,它会将永久链接附加到已复制的文本中。 - amelvin

1

1
最近我注意到一些网站上出现了“剪贴板劫持”的情况,比如thefutoncritic.com和cracked.com。如果你使用Adblock,只需进入“手动输入”列表并添加*post-copypaste.js*即可。这样就可以防止这些网站将广告添加到你的剪贴板中。

0
我经常访问的一个新闻网站使用这个函数将“来源”附加到复制的内容中:
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接