Javascript:劫持副本?

时间:2010-01-14 16:55:28

标签: javascript

我刚刚在线阅读“泰晤士报”,我想从文章中复制一些文字并将其发送给朋友,但我注意到,当我这样做时,它会自动将链接添加回我所拥有的文章中复制。

这不是我的IM客户端的功能,所以我认为这是因为时代网站上的一些javascript而发生的。

如果我想在我的网站上实现它,我将如何实现这一目标?基本上,我必须劫持复制操作并将文章的URL附加到复制内容的末尾,对吧?想法?

以下是我正在阅读的文章,供参考:http://www.time.com/time/health/article/0,8599,1914857,00.html

5 个答案:

答案 0 :(得分:5)

使用jQuery(您引用的网站正在使用)是一件轻而易举的事情:

$("body").bind('copy', function(e) {
    // The user is copying something
});

您可以使用jQuery Search&共享插件,只要有人从您的网站复制超过40个字符,就会执行完全事情:http://www.latentmotion.com/search-and-share/

您引用的网站显然正在使用名为Tynt Insight的服务来实现此目的。

答案 1 :(得分:1)

他们正在使用免费服务Tynt。如果你想完成同样的事情,只需使用相同的服务。

答案 2 :(得分:0)

您使用的浏览器(以及版本)?

在某些较新的浏览器中,会询问用户网站是否可以访问剪贴板,或者根本不允许。在其他浏览器(例如IE 6)中,它是允许的,网站可以轻松读取和写入您的副本剪贴板。

这是代码(仅限IE)

clipboardData.setData("Text", "I just put this in the clipboard using JavaScript");

答案 3 :(得分:0)

“复制和粘贴劫持者”jQuery插件完全符合您的要求,并且看起来比Tynt或Search&分享:http://plugins.jquery.com/project/copypaste

您可以轻松地格式化复制的内容,指定最大或最小字符,并轻松地将复制内容中的页面标题或URL包含在您想要的位置。

答案 4 :(得分:0)

我最近在另一个网站上注意到了这一点并写了blog post如何运作。 jQuery示例似乎并没有真正修改用户复制和粘贴的内容,只是添加了一个新的上下文菜单。

简而言之:

var content = document.getElementById("content");
content.addEventListener("copy", oncopy);

function oncopy() {
  var newEl = document.createElement("p");
  document.body.appendChild(newEl);
  newEl.innerHTML = "In your copy, messing with your text!";
  var selection = document.getSelection();
  var range = selection.getRangeAt(0);
  selection.selectAllChildren(newEl);
  setTimeout(function() {
    newEl.parentNode.removeChild(newEl);
    selection.removeAllRanges();
    selection.addRange(range);
  }, 0)
}

最后的setTimeout非常重要,因为如果最后一部分立即执行,它似乎不起作用。

此示例使用我选择的字符串在最后一刻替换您选择的文本。你也可以抓住现有的选择,并将你想要的任何内容附加到最后。