如何将文本自动附加到使用JavaScript复制的文本中
在JavaScript中,如何选择网站上的文本,复制它(通过Control+C、Command+C或Edit copy),并让JavaScript在剪贴板上附加一两行内容,以便用户粘贴时,显示他们复制的内容以及额外的行如何将文本自动附加到使用JavaScript复制的文本中,javascript,html,xhtml,copy,copy-paste,Javascript,Html,Xhtml,Copy,Copy Paste,在JavaScript中,如何选择网站上的文本,复制它(通过Control+C、Command+C或Edit copy),并让JavaScript在剪贴板上附加一两行内容,以便用户粘贴时,显示他们复制的内容以及额外的行 此外,这是否只能在站点的某些范围内进行?如果是,如何使用?您可以结合使用execCommand(“复制”)和execCommand(“粘贴”)来完成您想要的任务 这将帮助您: 我在faqs.org网站[1]上发现了这一点,我也很好奇。他们使用了tynt.com上的一些javasc
此外,这是否只能在站点的某些
范围内进行?如果是,如何使用?您可以结合使用execCommand(“复制”)
和execCommand(“粘贴”)
来完成您想要的任务
这将帮助您:
我在faqs.org网站[1]上发现了这一点,我也很好奇。他们使用了tynt.com上的一些javascript。我还发现一个ask metafilter答案[2]指向另一个javascript。它们应该是良好的起点。我自己还没有弄清楚,但我希望你可以将事件侦听器附加到正在讨论的div上
我开发了一个脚本来实现这一点(以及关于这一点的博客帖子):
$(“body”).bind('copy',函数(e){
如果(typeof window.getSelection==“undefined”)返回;//IE8或更早版本。。。
var body_element=document.getElementsByTagName('body')[0];
var selection=window.getSelection();
//如果选择很短,我们就不要打扰我们的用户
if((“”+选择)。长度<30)返回;
//在可见区域外创建一个div
var newdiv=document.createElement('div');
newdiv.style.position='absolute';
newdiv.style.left='-9999px';
body_元素appendChild(newdiv);
newdiv.appendChild(selection.getRangeAt(0.cloneContents());
//我们需要一个标签解决方案
//否则,“pre”中的文本将丢失所有换行符!
if(selection.getRangeAt(0.commonAncestorContainer.nodeName==“PRE”){
newdiv.innerHTML=“”+newdiv.innerHTML+”;
}
newdiv.innerHTML+=“
更多信息请访问:©;MySite.com”;
选择。选择所有子项(newdiv);
setTimeout(函数(){body_element.removeChild(newdiv);},200);
});
问题是,如何检测用户何时复制内容?然后我就可以从您发送给我的页面中找到如何执行该操作的方法了。jQuery具有一些优秀的内置复制/粘贴检测功能:有趣的事实:可以做到,非常无缝。(尝试按CTRL键复制内容)
<script>
$("body").bind('copy', function (e) {
if (typeof window.getSelection == "undefined") return; //IE8 or earlier...
var body_element = document.getElementsByTagName('body')[0];
var selection = window.getSelection();
//if the selection is short let's not annoy our users
if (("" + selection).length < 30) return;
//create a div outside of the visible area
var newdiv = document.createElement('div');
newdiv.style.position = 'absolute';
newdiv.style.left = '-99999px';
body_element.appendChild(newdiv);
newdiv.appendChild(selection.getRangeAt(0).cloneContents());
//we need a <pre> tag workaround
//otherwise the text inside "pre" loses all the line breaks!
if (selection.getRangeAt(0).commonAncestorContainer.nodeName == "PRE") {
newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
}
newdiv.innerHTML += "<br /><br />Read more at: <a href='"
+ document.location.href + "'>"
+ document.location.href + "</a> © MySite.com";
selection.selectAllChildren(newdiv);
window.setTimeout(function () { body_element.removeChild(newdiv); }, 200);
});
</script>